我希望将Object作为聚合结果中的字段返回,类似于this问题中的解决方案。但是,在上面提到的解决方案中,聚合会生成一个对象数组,该数组中只有一个项目,而不是一个独立的对象。例如,具有$push
操作的以下查询
$group:{
_id: "$publisherId",
'values' : { $push:{
newCount: { $sum: "$newField" },
oldCount: { $sum: "$oldField" } }
}
}
返回这样的结果
{
"_id" : 2,
"values" : [
{
"newCount" : 100,
"oldCount" : 200
}
]
}
}
不是这样的人
{
"_id" : 2,
"values" : {
"newCount" : 100,
"oldCount" : 200
}
}
}
后者是我要求的结果。那么如何重写查询以获得这样的结果呢?是否有可能或前者的结果是我能得到的最好的结果?
答案 0 :(得分:5)
您不需要 $push
运算符,只需添加将创建嵌入文档的最终 $project
管道。请遵循以下准则:
var pipeline = [
{
"$group": {
"_id": "$publisherId",
"newCount": { "$sum": "$newField" },
"oldCount": { "$sum": "$oldField" }
}
},
{
"$project" {
"values": {
"newCount": "$newCount",
"oldCount": "$oldCount"
}
}
}
];
db.collection.aggregate(pipeline);