MongoDB:在聚合结果中创建对象

Cob*_*ear 1 mongodb mongodb-query aggregation-framework

我想在我的聚合结果中将Object作为字段返回,类似于问题中的解决方案。但是,在上述解决方案中,聚合将导致对象数组只有该数组中的一项,而不是独立的对象。例如,类似以下查询的$push操作

 $group:{
     _id: "$publisherId",
     'values' : { $push:{
         newCount: { $sum: "$newField" },
         oldCount: { $sum: "$oldField" } }
     }
}
Run Code Online (Sandbox Code Playgroud)

返回这样的结果

{
        "_id" : 2,
        "values" : [ 
            {
                "newCount" : 100, 
                "oldCount" : 200
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

没有一个像这样

{
        "_id" : 2,
        "values" : {
                "newCount" : 100, 
                "oldCount" : 200
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

后者是我需要的结果。那么,如何重写查询以获得类似的结果?我可以得到最好的结果吗?

chr*_*dam 8

您不需要$push操作员,只需添加最终$project管道即可创建嵌入式文档。请遵循以下准则:

var pipeline = [
    {
        "$group": {
            "_id": "$publisherId",      
            "newCount": { "$sum": "$newField" },
            "oldCount": { "$sum": "$oldField" } 
        }
    },
    {
        "$project" {
            "values": {
                "newCount": "$newCount",
                "oldCount": "$oldCount"
            }
        }       
    }   
];

db.collection.aggregate(pipeline);
Run Code Online (Sandbox Code Playgroud)