【问题标题】:MongoDB Convert Array of Objects to Single ObjectMongoDB 将对象数组转换为单个对象
【发布时间】:2025-11-30 15:50:02
【问题描述】:

使用 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"
}

【问题讨论】:

    标签: mongodb aggregation-framework


    【解决方案1】:

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

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

    【讨论】:

    【解决方案2】:

    基于 Veeram 上面使用 $mergeObjects 的回答,这里有一个使用 $project 的更简洁的查询。

    查询

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

    结果

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

    【讨论】:

      最近更新 更多