5

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

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

显示分箱日期的图表

4

1 回答 1

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 } },
]

使用 Mongo 图表,您只需将输出字段映射到 X 和 Y 轴

在此处输入图像描述

于 2019-08-14T03:22:47.123 回答