Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从集合mongoDB中的数组查询文档_Mongodb_Mongoose_Nosql_Mongodb Query - Fatal编程技术网

从集合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,我希

我试图从MongoDB的集合中获取数据,我有以下结构:

因此,基本上,我想做的事情是,例如,从
事件中以
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就像一个符咒!谢谢。