首页 > 解决方案 > 从集合 mongoDB 中的数组中查询文档

问题描述

我正在尝试从我的 MongoDB 集合中获取数据,我具有以下结构:

在此处检查 JSON 结构。

所以基本上我想做的事情是使用id: 456FROM来定位对象,events其中顶层_id是 == 2,并且只返回该对象。

我试过了aggregate()findOne()但没有一个能按我想要的方式工作......任何帮助都将不胜感激。

我试过的例子:

db.collectionName.findOne({ _id: '2', events: { $elemMatch: { _id: 456 } }})

我无法更改以下结构,因为顶级 _id 实际上是 userId 并且我想获取具有 _id: '2' 的用户的所有事件。

标签: mongodbmongoosenosqlmongodb-query

解决方案


您可以从过滤开始,_id尽可能多地过滤掉。然后,您可以使用$unwind获取每个文档的单个事件并为 nested 应用另一个匹配项_id。在最后一步中,您可以使用$replaceRoot仅获取嵌套文档,尝试:

Model.aggregate([
    { $match: { _id: "2" } },
    { $unwind: "$events" },
    { $match: { "events._id": "456" } },
    { $replaceRoot: { newRoot: "$events" } } 
])

输出:

{ "_id" : "456", "name" : "eventName_1" }

推荐阅读