从集合mongoDB中的数组查询文档
我试图从MongoDB的集合中获取数据,我有以下结构: 因此,基本上,我想做的事情是,例如,从从集合mongoDB中的数组查询文档,mongodb,mongoose,nosql,mongodb-query,Mongodb,Mongoose,Nosql,Mongodb Query,我试图从MongoDB的集合中获取数据,我有以下结构: 因此,基本上,我想做的事情是,例如,从事件中以id:456为目标的对象,其中顶级\u id为==2,并且只返回该对象 我尝试了aggregate(),findOne(),但没有一个能按我想要的方式工作。。。任何帮助都将不胜感激 我尝试过的例子: db.collectionName.findOne({u-id:'2',事件:{$elemMatch:{{u-id:456}}}) 我无法更改以下结构,因为顶级的_-id实际上是userId,我希
事件中以id:456
为目标的对象,其中顶级\u id
为==2,并且只返回该对象
我尝试了aggregate()
,findOne()
,但没有一个能按我想要的方式工作。。。任何帮助都将不胜感激
我尝试过的例子:
db.collectionName.findOne({u-id:'2',事件:{$elemMatch:{{u-id:456}}})
我无法更改以下结构,因为顶级的_-id实际上是userId,我希望为具有_-id的用户获取所有事件,例如:“2”。您可以从按\u-id
筛选开始,以尽可能多地筛选。然后,您可以使用获取每个文档的单个事件,并为嵌套的\u id
应用另一个匹配项。在可用于仅获取嵌套文档的最后一步中,请尝试:
Model.aggregate([
{ $match: { _id: "2" } },
{ $unwind: "$events" },
{ $match: { "events._id": "456" } },
{ $replaceRoot: { newRoot: "$events" } }
])
产出:
{ "_id" : "456", "name" : "eventName_1" }
陛下它部分起作用。例如,在第二个$match上,如果我写的像。。{$match:{'events.eventName:'123'}},它会返回对象,但如果我尝试使用{$match:{'events.\u id':'456'}不会返回任何内容:\,这可能是因为我使用的是''u id'而不是'id',例如?我认为我的问题来自于此,我正在使用MongoDB ObjectId()创建事件id;因此在数据库中,“id”表示为“_id”:ObjectId('id');不仅是“_id”:“id”是的,我可以确认,将事件id
保存为ObjectId().toString(),然后将其查询为“event.\u id”:eventId就像一个符咒!谢谢。