gpt4 book ai didi

java - 复杂的 MongoDB 在 Java 中查找大型文档的查询

转载 作者:行者123 更新时间:2023-12-02 05:07:51 26 4
gpt4 key购买 nike

当我希望查找包含嵌套文档数组的所有文档,其中其中一个嵌套文档满足所有指定条件时,如何使用 Java 中的 BasicDBObjects 进行 MongoDB 查询?

获取示例数据:

[
{
"_id":"blood_0",
"type":"O",
"list":[
{
"firstname":"John",
"lastname":"Smith",
"zipcode":"12345"
},
{
"firstname":"John",
"lastname":"Hamilton",
"zipcode":"54627"
},
{
"firstname":"Ben",
"lastname":"Brick",
"zipcode":"12345"
},
{
"firstname":"William",
"lastname":"Tell",
"zipcode":"15487"
}
]
},
{
"_id":"blood_1",
"type":"AB",
"list":[
{
"firstname":"Mary",
"lastname":"Smith",
"zipcode":"12345"
},
{
"firstname":"John",
"lastname":"Henry",
"zipcode":"54624"
},
{
"firstname":"Jacob",
"lastname":"Tell",
"zipcode":"19283"
},
{
"firstname":"William",
"lastname":"Dirk",
"zipcode":"15999"
}
]
}
]

如果我只想返回列表中包含满足 firstname = Williamlastname = Tell 标准的联系人的对象,我该怎么做那?我正在执行的查询没有对条件进行分组,因此我会得到两个结果,而实际上我只应该得到一个结果。

我如何执行相同的查询,同时检查 type = AB 以及其他条件,这不会返回任何结果?

最佳答案

您正在寻找$elemMatch运算符(operator)。它将查询运算符限制为值数组中的单个元素。

在 shell 中,您的查询将如下所示:

db.people.find( { list : { $elemMatch : { lastName:"Smith", firstName: "John" } } } )

添加血型:

db.people.find( { 
type : "AB",
list : { $elemMatch : { lastName:"Smith", firstName: "John" } }
} )

使用 Java 驱动程序会变得有点冗长。

DBObject elemMatch = new BasicDBObject();
elemMatch.put("lastName","Smith");
elemMatch.put("firstName","John");

DBObject query = new BasicDBObject();
query.append( "type", "AB");
query.append( "list", elemMatch);

将该查询传递给集合上的 find() 方法之一,您应该会获得您要查找的文档。

请注意,$elemMatch 查询运算符将返回整个文档,包括数组中的所有元素。有一个类似名称的投影运算符,用于将返回的数组元素限制为仅匹配的元素。

HTH - 罗布。

关于java - 复杂的 MongoDB 在 Java 中查找大型文档的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27609999/

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