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

Posted

技术标签:

【中文标题】如何使用 MongoDB 聚合对唯一 ID 求和?【英文标题】:How to do sum unique ids with MongoDB aggregation? 【发布时间】:2016-01-26 08:33:02 【问题描述】:

我正在尝试使用以下数据:我有一系列“日志”,其中列出了 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”总共购买了 3 次,客户“_id 8573”总共购买了 1 次,以此类推。

我想知道总购买量大于 3 的客户总数。一个人如何“总结”客户总数?

目前,我知道如何使用$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 是什么? 感谢您的帮助!

【问题讨论】:

您能否展示具有预期结果的示例文档? @user3100115 我删除了示例文档。查看编辑历史,或者这个问题:***.com/questions/35019119/… 【参考方案1】:

您可以利用 $match 和 $project。

类似于:

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

【讨论】:

括号中有错误。我认为正确的排序应该是这样的:db.log.aggregate([ $group: _id: "$customer_id" , total_purchases: $sum: 1, $match: "total_purchases": "$gt": 3 , $project: "_id": 0, "total_purchases": 1 ]) 但是,这并没有计算超过三个订单的客户总数。

以上是关于如何使用 MongoDB 聚合对唯一 ID 求和?的主要内容,如果未能解决你的问题,请参考以下文章

Mongodb对来自聚合方面的两个相似数据数组进行分组和求和

如何在 mongodb 中聚合子集合并应用 $count 不起作用

是否可以在 MongoDB 聚合期间为每个文档创建唯一 ID?

Mongodb查询聚合和Groupby复杂过滤、求和、百分比查询

如何在使用 MongoTemplate 进行分组期间对 mongodb 内部字段求和并推送它

mongodb3.4字符类型的字段求和