MongoDB:在聚合结果

时间:2016-05-23 12:16:05

标签: mongodb mongodb-query aggregation-framework

我希望将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
         }
    }
}

后者是我要求的结果。那么如何重写查询以获得这样的结果呢?是否有可能或前者的结果是我能得到的最好的结果?

1 个答案:

答案 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);