mongodb - mongo 多重计数和除法结果
问题描述
我有一个 mongodb 集合如下:
[
{
"_id" : ObjectId("5ba0e5a99e7537012371855a"),
"user_id" : 2,
"action" : 0,
"source" : 1,
"service" : "FootPlus",
"free" : false,
"source_detail" : {
"source_type" : "landing",
"source_id" : 2,
"promoter_id" : 1
},
"created_at" : ISODate("2018-09-18T11:46:49.000Z")
}
{
"_id" : ObjectId("5ba0e5cc9e7537013d57e37a"),
"user_id" : 2,
"action" : 1,
"service" : "FootPlus",
"source" : 0,
"created_at" : ISODate("2018-09-18T11:47:24.000Z"),
"source_detail" : {
"source_type" : "landing",
"source_id" : 2,
"promoter_id" : 1
}
}
]
我想按 source_detail.promoter_id 和 count action = 0 和 action = 1 进行分组,并将 action = 0 的计数除以每个发起人的 action = 1,所以我的结果应该是:
[
{
"promoter_id": 2
"action_0": 27,
"action_1": 9,
"devide": 3
},
{
"promoter_id": 3
"action_0": 18,
"action_1": 3,
"devide": 6
}
]
我怎样才能达到这个结果?谢谢。
解决方案
您可以使用以下聚合。
就像是
db.colname.aggregate([
{"$group":{
"_id":"$source_detail.promoter_id",
"action_0":{"$sum":{"$cond":[{"$eq":["$action",0]},1,0]}},
"action_1":{"$sum":{"$cond":[{"$eq":["$action",1]},1,0]}}
}},
{"$addFields":{"divide":{"$divide":["$action_0","$action_1"]}}}
])
推荐阅读
- pyspark - AWS Glue 作业方法 pyWriteDynamicFrame 不存在
- c# - C# 对象序列化安全和最佳方法?谁能给我ans?
- javascript - 如何使用 JavaScript ES6 过滤和转换这个集合?
- apache-poi - Apache POI - 重新排序行
- python - Web抓取请求停止工作,在python中显示“响应[401]”?
- python-3.x - 如何将 Pyglet 与 Twisted/Asyncio 集成?
- java - 如何在 Java 中加密和解密 sqlite3 数据库?
- hive - presto + hive.metastore.uri + presto worker 如何连接到 hive Metastore
- python - 有没有办法从输入中取出数字?
- perl - 可以在更深层次的绑定哈希分配上调用 STORE 吗?