使用MongoDB Charts,我如何绘制累计增长图表?使用包含创建时信息的文档的_id值,我想绘制一段时间内数据库中文档数量的图表。例如,如果在7月份创建了10个文档,在8月份又创建了10个文档,则该图表应显示7月份的10个文档和8月份的20个文档。
很容易将每个月的文档创建日期绑定(参见下面的示例),但我想将其转换为累积增长图表。MongoDB可以使用MongoDB聚合管道,如果这有助于…的话

发布于 2019-08-14 11:22:47
前段时间我已经回答过类似的问题了,here,不过,如果能带你了解整个解决方案会更好。
是的,您需要聚合来重塑您的数据。首先,您需要使用$toDate运算符将ObjectId值转换为日期。使用$dateToString将允许您按天对这些日期进行分类。然后你可以对它们进行$group和计数。
要计算“累加”部分,您需要将它们全部放入单个文档(按null分组),这将允许您对将表示数组索引(0,1,2等)的数字的$range运行$map。对于每个索引,您可以将相应的日期作为输出和$sum $slice -ed数组的值。
剩下的很简单,因为您只需要运行$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 } },
]使用Mongo Chart,您只需将输出字段映射到X和Y轴

https://stackoverflow.com/questions/57412129
复制相似问题