查询嵌套数组

时间:2018-01-03 20:25:25

标签: node.js mongodb mongoose

我有以下用户文档。我想返回所有朋友的列表'其中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?

1 个答案:

答案 0 :(得分:1)

您的查询是正确的,但会返回所有用户文档,其中至少有一位朋友符合您的条件。

如果你只是想要收集来自好友集合的项目,你可能会做这样的事情。

db.User.aggregate([
  { $unwind: "$friends" },
  { $replaceRoot: { newRoot: "$friends" } },
  { $match: { name: "Bob" }}
])