如何使用 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复杂过滤、求和、百分比查询