如何通过嵌套在多个数组中的_id来访问对象

新的MEAN.js / Mongo开发人员在这里,我真的很感激任何见解我可以在这个问题上得到。

这是我正在使用的数据的相关部分,从文档的顶部。 我试图深入到暂停数组中的对象的_id字段,以便我可以将它匹配到给定的值(以访问特定的实例)并对其他属性执行更新。

{ "_id" : ObjectId("575c902078c8db620d50699e"), "username" : "superadmin", "poms" : [ { "_id" : ObjectId("577a6c6c1d4ddcf805e6a4a0"), "pauses" : [ { "_id" : ObjectId("577a6c6e1d4ddcf805e6a4a1"), "momentResumed" : null, "momentPaused" : ISODate("2016-07-04T14:02:22.643Z") }, { "_id" : ObjectId("577a6cae1d4ddcf805e6a4a2"), "momentResumed" : null, "momentPaused" : ISODate("2016-07-04T14:03:26.364Z") } ], "momentCompleted" : null, "momentStarted" : ISODate("2016-07-04T14:02:20.383Z") }, { "_id" : ObjectId("577a6d63bc35cf1006c05f64"), "pauses" : [ { "_id" : ObjectId("577a6d64bc35cf1006c05f65"), "momentResumed" : null, "momentPaused" : ISODate("2016-07-04T14:06:28.685Z") }, { "_id" : ObjectId("577a6d67bc35cf1006c05f66"), "momentResumed" : null, "momentPaused" : ISODate("2016-07-04T14:06:31.869Z") }, { "_id" : ObjectId("577a6d7ebc35cf1006c05f67"), "momentResumed" : null, "momentPaused" : ISODate("2016-07-04T14:06:54.594Z") } ], "momentCompleted" : ISODate("2016-07-04T14:07:00.455Z"), "momentStarted" : ISODate("2016-07-04T14:06:27.145Z") } ] } 

这里是我提出的聚合查询:

 { "$match": { "_id": req.user._id } }, { "$unwind": "$poms" }, { "$project": { "_id": 0, "pom": "$poms" } }, { "$match": { "pom._id": req.params.pomId } }, { "$unwind": "$pom.pauses" }, { "$project": { "pause": "$pom.pauses" } } 

不幸的是它给了空的括号。 我真的很难过,我已经试过了我所能想到的一切。 你将如何从里面“暂停”返回一个具有特定_id的对象?

任何帮助或意见将不胜感激。

无论你通过对象id匹配。 尝试使用这个..

 mongodb.ObjectID.createFromHexString(req.user._id); mongodb.ObjectID.createFromHexString(req.params.pomId ); 

https://mongodb.github.io/node-mongodb-native/api-bson-generated/objectid.html