在Mongo Aggregate Query

时间:2017-03-20 17:25:57

标签: mongodb sum aggregation-framework

数据如下:

{
    "_id":5345345345,
    "city": "Detroit",
    "people":[
        {
            "name":"Larry",
            "value":1200
        },
        {
            "name":"Steve",
            "value":1100
        },
        {
            "name":"Larry",
            "value":1000
        },
        {
            "name":"Joe",
            "value":800
        },
        {
            "name":"Larry",
            "value":500
        },
        {
            "name":"Joe",
            "value":700
        }

    ]
}

我在聚合查询的中间有这个。我可以从这里做些什么来总结价值领域,并为每个人提供独特的条目" people"?即

{
    "_id":5345345345,
    "city": "Detroit",
    "people":[
        {
            "name":"Larry",
            "value":2700
        },
        {
            "name":"Steve",
            "value":1100
        },
        {
            "name":"Joe",
            "value":1500
        }
    ]
}

另外,如果" people"还不能有返回空文件的查询。数组为空,例如,不能这样做:

{$unwind:{
    path:people
    }
},
{$group :
    {
        _id:"$people.name",
        total_value:{"$sum":"people.value"}
    }
}

如果在人数组为空时没有返回空文档,那么它可以正常工作。

需要以某种方式使用$ addToSet和$ sum?如何保持与名称相关的价值?

1 个答案:

答案 0 :(得分:0)

使用

 {
        $unwind: {
            path : "$people",
            preserveNullAndEmptyArrays : true // this line!
        }
 }