MongoDB 图表 – 图表累积增长?

dec*_*eze 5 mongodb aggregation-framework mongodb-atlas mongodb-charts

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

按月划分文档创建日期很容易(见下面的例子),但我想把它变成一个累积增长图表。MongoDB Charts 可以使用 Mongo 聚合管道,如果这有帮助的话……

展示分箱日期的图表

mic*_*ckl 9

前段时间我已经在这里回答了类似的问题但是最好带您完成整个解决方案。

是的,您需要聚合来重塑数据。首先,您需要使用$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 轴

在此处输入图片说明