【问题标题】:Mongo aggregation add to subelementMongo聚合添加到子元素
【发布时间】:2016-06-11 00:10:40
【问题描述】:

我得到了类似的文件

{
    "_id" : ObjectId("5756c699fc5a2a09308a1c97"),
    "bucket" : [ 
        {
            "productid" : "Book1",
            "name" : "Sample Book1"
        }, 
        {
            "productid" : "Book2",
            "name" : "Sample Book 2"
        }
    ],
    "creatorId" : "c6c3a8f3"
}

有什么方法可以将 creatorId 添加到存储桶中的每个项目并获得结果:

{
    "_id" : ObjectId("5756c699fc5a2a09308a1c97"),
    "bucket" : [ 
        {
            "productid" : "Book1",
            "name" : "Sample Book1",
             "creatorId" : "c6c3a8f3"
        }, 
        {
            "productid" : "Book2",
            "name" : "Sample Book 2",
             "creatorId" : "c6c3a8f3"
        }
    ]

}

【问题讨论】:

  • 您是要保留这些更改,还是只需要一个带有输出的查询?
  • @profesor79 这只是一个例子。实际上,我希望将父对象中的所有字段都添加到子对象中。父级中有多个字段可能已知或未知。
  • 你的意思是什么父级中有多个字段可能是已知的或未知的?

标签: mongodb mongodb-query


【解决方案1】:

如果你要重塑你的集合,你可以使用聚合框架——然后取消注释聚合管道的 $out 阶段,结果将存储在集合newCollectionName

db.andrej.aggregate([{
            $unwind : "$bucket"
        }, {
            $group : {
                _id : "$_id",
                bucket : {
                    $push : {
                        productid : "$bucket.productid",
                        name : "$bucket.name",
                        creatorId : "$creatorId"
                    }
                }
            }
        },
        //{$out:"newCollectionName"}
    ])

【讨论】:

  • 为什么不等待OP的澄清呢?如果这是 OP 想要的,可能有更好的方法来做到这一点。顺便说一句,我建议您使用“收藏”之类的名称作为收藏的名称。这更有意义。
猜你喜欢
  • 1970-01-01
  • 2015-03-23
  • 1970-01-01
  • 2018-08-16
  • 1970-01-01
  • 2023-03-31
  • 2018-10-25
  • 2019-01-26
  • 1970-01-01
相关资源
最近更新 更多