【发布时间】: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}}
【问题讨论】:
-
你能展示你的样本集吗
标签: mongodb mongoose mongodb-query nosql aggregation-framework