我有以下用户文档。我想返回所有朋友的列表'其中friends.name等于" Bob"。
<a name="NestedList">Nested List with details </a>
当我尝试使用下面的查询时,它正在工作,但它返回整个朋友列表,而不仅仅是鲍勃。
{
"_id" : ObjectId("5a4be9f200471a49d2e23ce4"),
"name": "James"
"friends" : [
{
"_id" : ObjectId("5a4be9f200471a49d2e23ce6"),
"dob" : ISODate("2018-01-02T00:00:00.000Z"),
"name" : "Bob"
},
{
"_id" : ObjectId("5a4be9f200471a49d2e23ce5"),
"dob" : ISODate("2018-01-02T00:00:00.000Z"),
"name" : "Fred"
}
],
"__v" : 0
}
我如何查询,所以我只返回Bob对象而不是Fred?
答案 0 :(得分:1)
您的查询是正确的,但会返回所有用户文档,其中至少有一位朋友符合您的条件。
如果你只是想要收集来自好友集合的项目,你可能会做这样的事情。
db.User.aggregate([
{ $unwind: "$friends" },
{ $replaceRoot: { newRoot: "$friends" } },
{ $match: { name: "Bob" }}
])