dec*_*eze 5 mongodb aggregation-framework mongodb-atlas mongodb-charts
使用MongoDB Charts,我如何绘制累积增长图表?使用_id包含创建时间信息的文档的值,我想绘制数据库中文档数量随时间变化的图表。例如,如果在 7 月创建了 10 个文档,而在 8 月又创建了 10 个,则图表应显示 7 月的 10 个和 8 月的 20 个。
按月划分文档创建日期很容易(见下面的例子),但我想把它变成一个累积增长图表。MongoDB Charts 可以使用 Mongo 聚合管道,如果这有帮助的话……
前段时间我已经在这里回答了类似的问题,但是最好带您完成整个解决方案。
是的,您需要聚合来重塑数据。首先,您需要使用$toDate运算符将 ObjectId 值转换为日期。使用$dateToString将允许您按天对这些日期进行分类。然后你可以对它们进行$group并计数。
要计算“累积”部分,您需要将它们全部放入单个文档中(分组依据null),这将允许您在将表示数组索引(等)的$range数字上运行$map。对于每个索引,您将相应的日期用于输出和$sum $slice -ed 值数组。0,1,2
剩下的很简单,因为您只需要运行$unwind来每天获取单个文档,并运行$replaceRoot以摆脱最终结果中的嵌套文档。
[
{ $addFields: { "date": { $dateToString: { format: "%Y-%m-%d", date: { $toDate: "$_id" }} } }},
{ $group: { _id: "$date", count: { $sum: 1 } } },
{ $sort: { _id: 1 } },
{ $group: { _id: null, days: { $push: "$_id" }, counts: { $push: "$count" } } },
{ $project: {
days: {
$map: {
input: { $range: [ 0, { $size: "$days" } ] },
in: { _id: { $arrayElemAt: [ "$days", "$$this" ] }, cumGrowth: { $sum: { $slice: [ "$counts", 0, { $add: [ "$$this", 1 ] } ] } } }
}
}
}
},
{ $unwind: "$days" },
{ $replaceRoot: { newRoot: "$days" } },
{ $sort: { _id: 1 } },
]
Run Code Online (Sandbox Code Playgroud)
使用 Mongo 图表,您只需要将输出字段映射到 X 和 Y 轴
| 归档时间: |
|
| 查看次数: |
1148 次 |
| 最近记录: |