1

假设我有如下数据:

{
    "name":"jack",
    "net_worth":1000
}

我想做一个聚合,将每个名为“john”或“jack”的人的平均净资产作为一个数字返回。

db.mycollection.aggregate([
    {$group:
        {"_id":"$name",
         "average_worth":{$avg:"$net_worth"}
        }
    }    
])

此聚合将返回集合中同名人员的平均净资产。我如何平均两个(或更多)特定名称?我知道我可以$match过滤除 Johns 和 Jacks 之外的所有人,但我不知道如何将它们结合起来。

4

1 回答 1

0

您可以$match结合使用$or

> db.ppl.insert({"name": "jack", "worth" : 240000});
> db.ppl.insert({"name": "john", "worth" : 14000});
> db.ppl.insert({"name": "bill", "worth" : 88000000});

> db.ppl.aggregate([ 
     { $match:{$or:[{name:"jack"},{name:"john"}]}}, 
     {$group : { "_id" : 1, "average_worth":{$avg:"$worth"} } }])
{
        "result" : [
                {
                        "_id" : 1,
                        "average_worth" : 127000
                }
        ],
        "ok" : 1
}

请注意,我必须_id$group.

于 2013-10-09T16:30:51.207 回答