首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB图表-图表累计增长?

MongoDB图表-图表累计增长?
EN

Stack Overflow用户
提问于 2019-08-08 20:01:24
回答 1查看 1.3K关注 0票数 5

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

很容易将每个月的文档创建日期绑定(参见下面的示例),但我想将其转换为累积增长图表。MongoDB可以使用MongoDB聚合管道,如果这有助于…的话

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-14 11:22:47

前段时间我已经回答过类似的问题了,here,不过,如果能带你了解整个解决方案会更好。

是的,您需要聚合来重塑您的数据。首先,您需要使用$toDate运算符将ObjectId值转换为日期。使用$dateToString将允许您按天对这些日期进行分类。然后你可以对它们进行$group和计数。

要计算“累加”部分,您需要将它们全部放入单个文档(按null分组),这将允许您对将表示数组索引(0,1,2等)的数字的$range运行$map。对于每个索引,您可以将相应的日期作为输出和$sum $slice -ed数组的值。

剩下的很简单,因为您只需要运行$unwind来获取每天的单个文档,运行$replaceRoot来去除最终结果中的嵌套文档。

代码语言:javascript
复制
[
    { $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轴

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57412129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档