说我的数据看起来像这样:
{
"name":"jack",
"net_worth":1000
}
我想做一个汇总,将每个名为“john”或“jack”的人的平均净值作为单个数字返回。
db.mycollection.aggregate([
{$group:
{"_id":"$name",
"average_worth":{$avg:"$net_worth"}
}
}
])
此汇总将返回集合中具有相同名称的人的平均净值。我如何平均两个(或更多)特定名称?我知道我可以做$match
来过滤除约翰斯和杰克之外的所有人,但我不知道如何将它们结合起来。
答案 0 :(得分: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
,因为我们需要来自jack和john的结果的相同ID。