gpt4 book ai didi

java - Morphia:使用 Morphia 过滤 ArrayList 中的元素

转载 作者:太空宇宙 更新时间:2023-11-04 13:15:07 25 4
gpt4 key购买 nike

我有一个名为 Project 的 Java 类,其 users ArrayList<User>包含用户对象的属性。

我的项目集合看起来像

[
{
"_id" : ObjectId("56410150d277de02f3b67495"),
"name" : "my-project",
"users" : [
{
"id" : "58b5eb81-35b2-4719-87ad-e5eea76a478f",
"name" : "john",
"lastName" : "Doe"
}
]
}
]

我想在此属性中找到具有特定 UUID 的用户。我可以通过以下查询在 MongoDB 中找到它: db.getCollection('projects').find({"users.id": "58b5eb81-35b2-4719-87ad-e5eea76a478f"})
如何使用 Morphia 获得相同的结果?

我试过这个:
Project project = datastore.createQuery(Project.class).filter("users.id", user_id).get();

和这个:
Project project = datastore.find(Project.class, "users.id", user_id).get();

但没有运气:(

有什么帮助吗?

我希望得到:
{
"id" : "58b5eb81-35b2-4719-87ad-e5eea76a478f",
"name" : "john",
"lastName" : "Doe"
}

最佳答案

使用 $elemMatch 投影以检索数组。您要生成的 mongo 查询 isFinite

db.project.findOne(
{"users.id": "58b5eb81-35b2-4719-87ad-e5eea76a478f"},
{
"_id": 0,
"users": {
"$elemMatch": { "id": "58b5eb81-35b2-4719-87ad-e5eea76a478f" }
}
}).users[0]

或使用 $ projection 运算符,它根据查询语句中的某些条件投影数组元素。在您的情况下,您的查询语句将使用点符号来查询具有至少一个元素的 Images 数组:
db.project.findOne(
{"users.id": "58b5eb81-35b2-4719-87ad-e5eea76a478f"},
{ "_id": 0, "users.$": 1 }
).users[0];

在 Morphia(未经测试)中,您可能想尝试 elem 运算符(operator)
Project project = datastore.createQuery(Project.class)
.filter("users elem", BasicDBObjectBuilder.start("id", "58b5eb81-35b2-4719-87ad-e5eea76a478f"))
.retrievedFields(true, "users.$")
.get();

要么
Project project = datastore.createQuery(Project.class)
.field("users.id").eq("58b5eb81-35b2-4719-87ad-e5eea76a478f")
.retrievedFields(true, "users.$")
.get();

或流畅的界面 hasThisElement() 方法
User user = new User();
user.setId("58b5eb81-35b2-4719-87ad-e5eea76a478f");

Query<Project> query = datastore.createQuery(Project.class)
//.field("users.id").equal("58b5eb81-35b2-4719-87ad-e5eea76a478f")
.field("users").hasThisElement(user)
.retrievedFields(true, "users.$");

关于java - Morphia:使用 Morphia 过滤 ArrayList 中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33617780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com