用于构建条件和的 MongoDB 聚合
Posted
技术标签:
【中文标题】用于构建条件和的 MongoDB 聚合【英文标题】:MongoDB Aggregation for building conditional sums 【发布时间】:2020-04-21 23:11:38 【问题描述】:假设我的 MongoDB 中有一些用户文档。每个用户都有一个 type
(int) 和 presence
days (boolean)。
我的文档架构
type: NumberInt() // 1|2|3
presence:
day1: true,
day2: false,
day3: true
我想计算每种类型用户的出现天数,以便在折线图中可视化他们的出现次数。所需的输出必须看起来像这样。表示类型的数组中的三个对象。每个对象都有系列。它们代表在指定日期出现的特定类型用户的总和。
想要的结果
[
name: "Type1"
series: [
name: "Day1",
value: 5, // count (type==1 && d1==true)
,
name: "Day2",
value: 8, // count (type==1 && d2==true)
,
name: "Day3",
...
]
,
name: "Type2"
series: [
name: "Day1",
value: 10, // count (type==2 && d1==true)
, , ]
,
name: "Type3"
series: [, , ]
,
name: "AllCombined"
series: [, , ]
]
问题
如何使用 mongodb 聚合来实现这一点?我玩过$match
、$sort
、$project
、$sum
,但我想不通。在此先感谢:)
请求的样本:用户收藏
_id: ..., type: 1, presence: d1:true, d2: true, d3: false
_id: ..., type: 2, presence: d1:false, d2: true, d3: false
_id: ..., type: 3, presence: d1:true, d2: false, d3: true
_id: ..., type: 1, presence: d1:true, d2: false, d3: false
【问题讨论】:
你能展示你的样本集吗 【参考方案1】:你可以使用下面的聚合
db.collection.aggregate([
"$group":
"_id": "$type",
"d1": "$sum": "$cond": [ "$eq": ["$presence.d1", true] , 1, 0] ,
"d2": "$sum": "$cond": [ "$eq": ["$presence.d2", true] , 1, 0] ,
"d3": "$sum": "$cond": [ "$eq": ["$presence.d3", true] , 1, 0]
,
"$project":
"_id": 0,
"name": "$concat": ["Type", "$toString": "$_id" ] ,
"series": [
"name": "Day1",
"value": "$d1"
,
"name": "Day2",
"value": "$d2"
,
"name": "Day3",
"value": "$d3"
]
])
【讨论】:
以上是关于用于构建条件和的 MongoDB 聚合的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB聚合使用表达式运算符(函数)分组按条件计数统计案例一则