如何使用MongoDB聚合对唯一ID进行求和?

时间:2016-01-26 08:33:02

标签: mysql mongodb mongodb-query aggregation-framework

我正在尝试使用以下数据:我有一系列"日志"列出customer_id以及有关所购产品的各种信息:

每个客户可能有几个"日志" (因为每个客户可能已经多次购买)。我可以"数"使用

计算每个客户的日志数量
> db.test.aggregate([{$group : {"_id" : "$customer_id", total_purchases : {$sum : 1}}}])

输出

{ "_id" : 7293, "total_purchases" : 3 }
{ "_id" : 8573, "total_purchases" : 1 }
{ "_id" : 2734, "total_purchases" : 2 }
{ "_id" : 7334, "total_purchases" : 7 }
{ "_id" : 1239, "total_purchases" :12 }
{ "_id" : 8342, "total_purchases" : 1 }
{ "_id" : 9834, "total_purchases" : 1 }
{ "_id" : 0012, "total_purchases" : 1 }
{ "_id" : 7234, "total_purchases" : 3 }
{ "_id" : 8342, "total_purchases" : 5 }
...

所以,客户" _id 7293"共进行了三次购买,客户" _id 8573"共进行了一次购买等。

我想知道购买总数超过三的客户总数。一个"总和"客户总数?

目前,我知道如何使用$match列出总购买量超过三的客户总数,即

> db.test.aggregate([{$group : {"_id" : "$customer_id", total_purchases : {$sum : 1}}}]), {total_purchases : {"$gt" : 3}}])

输出

{ "_id" : 7334, "total_purchases" : 7 }
{ "_id" : 1239, "total_purchases" :12 }
{ "_id" : 8342, "total_purchases" : 5 }
{ "_id" : 1324, "total_purchases" : 6 }
{ "_id" : 9823, "total_purchases" : 9 }
...

如何只输出一个数字,即购买量大于3的客户总数? SQL的等价物是什么? 谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

您可以将$ match与$ project一起使用。

类似于:

db.log.aggregate([{      
    $group: {
         _id: "$customer_id",
         total_purchases: { 
              $sum: 1 
         }
     }, 
     { $match: { "total_purchases": { $gt: 3 }},
     { $project: { "_id": 0, "total_purchases": 1 }}    
 }}])