MongoDB将对象数组转换为单个对象

时间:2019-01-19 02:33:31

标签: mongodb aggregation-framework

使用MongoDB聚合查询,如何将一系列文档转换为单个文档。该数组可以包含N个文档。

之前

"loop" : [
    {
        "field1" : "1"
    }, 
    {
        "field2" : "2", 
        "field3" : "3", 
    }, 
    {
        "field4" : "4", 
    }, 
    {
        "field5" : "5", 
        "field6" : "6"
    }
]

之后

"loop" : {
    "field1" : "1",
    "field2" : "2", 
    "field3" : "3", 
    "field4" : "4", 
    "field5" : "5", 
    "field6" : "6"
}

2 个答案:

答案 0 :(得分:2)

您可以在3.6及更高版本中使用以下聚合。

db.colname.aggregate(
 [{"$project":{
    "loop":{
      "$reduce":{
        "input":"$loop",
        "initialValue":{},
        "in":{"$mergeObjects":["$$value","$$this"]
        }
      }
    }
 }}]
)

答案 1 :(得分:1)

基于上面使用$ mergeObjects的Veeram的答案,这是使用$ project的更为简洁的查询。

查询

db.loop.aggregate(
    [{
        "$project": {
            "loop": { $mergeObjects: "$loop" }
        }
    }]
)    

结果

{ 
    "loop" : {
        "field1" : "1", 
        "field2" : "2", 
        "field3" : "3", 
        "field4" : "4", 
        "field5" : "5", 
        "field6" : "6"
    }
}