MongoDB 图表 – 图表累计增长?

MongoDB Charts – chart cumulative growth?

如何使用 MongoDB Charts 绘制累积增长图表?使用包含创建时间信息的文档的 _id 值,我想绘制数据库中文档数量随时间变化的图表。例如,如果在 7 月 10 日创建了文档,而在 8 月又创建了 10 个文档,则图表应显示 7 月为 10,8 月为 20。

按月对文档创建日期进行分类很容易(参见下面的示例),但我想将其转换为累积增长图表。 MongoDB 图表可以使用 Mongo 聚合管道,如果这有帮助的话……

我之前已经回答过类似的问题,但是最好能带您完成整个解决方案。

是的,您需要聚合来重塑数据。要开始,您需要使用 $toDate operator. Using $dateToString will allow you to categorize these dates by day. Then you can $group 将您的 ObjectId 值转换为日期并计数。

要计算 "cummulative" 部分,您需要将它们全部放入单个文档中(按 null 分组),这将允许您 运行 $map on $range of numbers that will be representing array indexes (0,1,2 etc). For each index you take corresponding date to the output and $sum $slice -ed值数组。

剩下的很简单,因为您只需要 运行 $unwind to get single document per day and $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 图表,您只需将输出字段映射到 X 轴和 Y 轴