mongodb - 从集合 mongoDB 中的数组中查询文档
问题描述
我正在尝试从我的 MongoDB 集合中获取数据,我具有以下结构:
所以基本上我想做的事情是使用id: 456
FROM来定位对象,events
其中顶层_id
是 == 2,并且只返回该对象。
我试过了aggregate()
,findOne()
但没有一个能按我想要的方式工作......任何帮助都将不胜感激。
我试过的例子:
db.collectionName.findOne({ _id: '2', events: { $elemMatch: { _id: 456 } }})
我无法更改以下结构,因为顶级 _id 实际上是 userId 并且我想获取具有 _id: '2' 的用户的所有事件。
解决方案
您可以从过滤开始,_id
尽可能多地过滤掉。然后,您可以使用$unwind获取每个文档的单个事件并为 nested 应用另一个匹配项_id
。在最后一步中,您可以使用$replaceRoot仅获取嵌套文档,尝试:
Model.aggregate([
{ $match: { _id: "2" } },
{ $unwind: "$events" },
{ $match: { "events._id": "456" } },
{ $replaceRoot: { newRoot: "$events" } }
])
输出:
{ "_id" : "456", "name" : "eventName_1" }
推荐阅读
- python - 引导 numpy 二维数组
- javascript - Shopify 产品价格除以 10
- material-table - How can I use tableRef.onRowSelected to update the UI via the onRowClick property?
- javascript - Convert ISO/UTC date to local by displaying timezone javascript/momentjs
- r - 如何将逗号分隔的多个响应转换为 R 中的虚拟编码列
- postgresql - 如何选择 postgres 多对一关系作为单行?
- websocket - 如何在 `@app.websocket` 装饰函数之外使用 websocket 向客户端发送消息?
- gmail - 有什么方法可以像通过过滤器/用户界面一样通过 API 进行完全相同的 Gmail 搜索?(我发现的普通 API 的行为不一样)
- jquery - 无法在 jQuery 中获取元素
- matlab - MATLAB指南中for循环的算术问题