具有两种组计数的mongoDB聚合

时间:2014-12-23 11:30:31

标签: mongodb aggregation-framework

如果我想弄清楚“约翰”付了多少钱,以及有多少人在此数据列表中购买了10美元产品

数据列表:

[
{
 "name": "john",
 "payment": 10
},
{
 "name": "john",
 "payment": 25
},
{
 "name": "michel",
 "payment": 10
}
]

我应该提出两个请求吗?或者有什么方法可以立刻得到这个吗?

2 个答案:

答案 0 :(得分:0)

我相信你必须使用2个单独的查询来实现

查询1

db.p.aggregate(
{
    "$match" : {"name":"john"}
},
{    
    "$group" :
    {
        "_id" : "$name",
        "total" : {"$sum" : "$payment"}
    }
}).result

查询2:

db.p.count({"payment":10})

答案 1 :(得分:0)

尝试此操作以查找每个人支付的费用

db.collection.aggregate(
  {
    "$group": {"_id": "$name" , "total": {"$sum": "$payment"}}
  }
)

您可以添加匹配子句以查找特定用户支付的费用

{
  "$match": {"name": "John" }
}

这是为了找到所有支付相同金额的人

db.collection.aggregate(
  {
    "$group": {"_id": "$payment" , "people": {"$addToSet": "$name"}}
  }
)

同样,您也可以在此处添加匹配条款,以查找谁支付了特定的amo0unt。如果您只需要计数,则使用db.collection.count()而不是聚合