【问题标题】:MongoDb. Get an object in a nested array [duplicate]蒙古数据库。获取嵌套数组中的对象[重复]
【发布时间】:2018-11-22 00:40:44
【问题描述】:

我有一个像这样的文档的集合:

{
    "_id" : "bc923adf-ddd9-4987-a759-2d3f8dbffe3e",
    "title" : "DocumentTitle",        
    "nestedObjects" : [ 
        {
            "_id" : "3eef3a60-8d70-4640-b494-cb17e52e73a7",
            "startTime" : "21:00:00",
            "endTime" : "00:00:00"
        },
        {
            "_id" : "5aa8ca60-8d70-4640-b494-cb17e52e4caa",
            "startTime" : "17:00:00",
            "endTime" : "23:00:00"
        }
    ]
}

我需要一个查询来获取同时匹配 Id、根对象 Id 和嵌套对象 Id 的“nestedObject”。例如,给定根对象 ID 等于“bc923adf-ddd9-4987-a759-2d3f8dbffe3e”,嵌套对象 ID 等于“5aa8ca60-8d70-4640-b494-cb17e52e4caa”,我想得到这个结果:

{
   "_id" : "5aa8ca60-8d70-4640-b494-cb17e52e4caa",
   "startTime" : "17:00:00",
   "endTime" : "23:00:00"
}

我试过这个查询;

var nestedObject = db.myCollection.aggregate(
[
    { "$match" : { "_id" : "bc923adf-ddd9-4987-a759-2d3f8dbffe3e" } }, 
    { "$unwind" : "$nestedObjects" }, 
    { "$match" : { "nestedObjects._id" : "5aa8ca60-8d70-4640-b494-cb17e52e4caa" } }, 
    { "$project" : { "startTime" : "$nestedObjects.startTime", "endTime":"$nestedObjects.endTime" } }
]);

我希望能够使用nestedObject.startTime 访问starTimeendTime 属性,但没有运气。另外,我想获得整个嵌套对象,而无需在project 阶段列出其所有属性。

我做错了什么?有没有更简单的查询可以运行?

谢谢。

【问题讨论】:

    标签: mongodb aggregation-framework


    【解决方案1】:

    $replaceRoot 替换您的$project 阶段:

    { "$replaceRoot" : { newRoot: "$nestedObjects" } }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-08
      • 1970-01-01
      • 2015-11-04
      • 1970-01-01
      相关资源
      最近更新 更多