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

时间:2016-07-04 17:23:37

标签: node.js mongodb express aggregation-framework

这里有新的MEAN.js / Mongo开发者,我非常感谢我能在这个问题上找到任何见解。

这是我正在使用的数据的相关部分,从文档的顶部开始。我试图深入到pauses数组中对象的_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的对象"暂停"?

非常感谢任何帮助或评论。

1 个答案:

答案 0 :(得分:1)

通过对象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