按月和流失/收入图表汇总收入对MongoDB集合进行分组

编程入门 行业动态 更新时间:2024-10-26 10:39:50
本文介绍了按月和流失/收入图表汇总收入对MongoDB集合进行分组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

db.orders(仅是小节摘录)

db.orders (only small excerpt)

{ "_id" : "20101200221", "order_date" : ISODate("2010-12-12T13:11:15Z"), "net_revenue" : 19.36, "customer_id" : "aaa@gmx" } { "_id" : "20111003701", "order_date" : ISODate("2011-10-12T08:40:55Z"), "net_revenue" : 15.13, "customer_id" : "aaa@gmx" } { "_id" : "20111204977", "order_date" : ISODate("2011-12-07T09:13:47Z"), "net_revenue" : 15.13, "customer_id" : "aaa@gmx" } { "_id" : "20120206778", "order_date" : ISODate("2012-02-04T09:46:35Z"), "net_revenue" : 15.13, "customer_id" : "aaa@gmx" } { "_id" : "20120408856", "order_date" : ISODate("2012-04-15T10:37:55Z"), "net_revenue" : 12.65, "customer_id" : "aaa@gmx" } { "_id" : "20101200001", "order_date" : ISODate("2010-12-07T17:40:54Z"), "net_revenue" : 26.34, "customer_id" : "bbb@web.de" } { "_id" : "20100100473", "order_date" : ISODate("2011-01-31T06:38:03Z"), "net_revenue" : 34.34, "customer_id" : "bbb@web.de" } { "_id" : "20110601857", "order_date" : ISODate("2011-06-14T08:40:39Z"), "net_revenue" : 16.13, "customer_id" : "bbb@web.de" } { "_id" : "20111003719", "order_date" : ISODate("2011-10-13T06:43:50Z"), "net_revenue" : 60.75, "customer_id" : "bbb@web.de" } { "_id" : "20120912597", "order_date" : ISODate("2012-09-20T09:16:08Z"), "net_revenue" : 38.6, "customer_id" : "bbb@web.de" } { "_id" : "20130101745", "order_date" : ISODate("2013-01-28T11:40:17Z"), "net_revenue" : 20.14, "customer_id" : "bbb@web.de" } { "_id" : "20140615910", "order_date" : ISODate("2014-06-10T14:55:11Z"), "net_revenue" : 32.45, "customer_id" : "bbb@web.de" }`

要创建客户流失/收入图,我需要按每个客户的初始订单/首次订单的月份对订单进行分组。在摘录中,您可以看到两个初始订单都是在12/2010完成的,因此以下所有订单都应属于该组,将其称为1,第2组将是拥有初始订单01/2011的每个人,等等。每个组将是它自己的图,并像这样堆叠:

to create a churn/revenue graph i need to group orders by month of their initial/first order per customer. in the excerpt you can see both initial orders were done 12/2010 so all the following orders should fall into this group, lets call it 1, group 2 would be everyone who had his initial order 01/2011 etc. every group will be its own graph and will be stacked like this:

组中的订单也必须重新分组为几个月,并且必须将收入相加。 我希望我能弄清楚我要达到的目标!我整天都在努力寻找一种方法来生成图表数据。谢谢您的帮助!

the orders in the groups also have to be grouped again into months and the revenue has to be summed. i hope i could make it clear what i am trying to achieve! it's all day i am trying to figure out a way how to produce the data for the graph. Any help is appreciated!

推荐答案

如果我正确理解,则希望按客户和按月收入。

If I understand correctly you want the revenue by customer and by month.

聚合查询中的$ group运算符正是您在此处查找的内容。

The $group operator in an aggregate query is exactly what you're looking for here.

db.orders.aggregate([ { $group : { _id: { customer_id: "$customer_id", month: {$month: "$order_date"} }, revenue: {$sum: "$net_revenue"} } }], ... );

使用上述查询,如果客户在不同月份订购,将出现多次。我不知道那是不是您想要的。相反,如果您想要该客户的所有订单的总价值,但也按他们第一次订购的时间进行排序,请执行以下操作:

With the above query, a customer will appear more than once if they order on separate months. I didn't understand if that is what you wanted or not. If instead you're wanting the total value for ALL orders from that customer, but sorted also by the FIRST time they ever ordered, do this instead:

db.orders.aggregate([ { $sort: { order_date : 1 } }, //order by date so that $first is correct { $group : { _id: { customer_id: "$customer_id", }, month: { $first: {$month: "$order_date"} } revenue: {$sum: "$net_revenue"} } }], ... );

更多推荐

按月和流失/收入图表汇总收入对MongoDB集合进行分组

本文发布于:2023-10-26 09:23:50,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1529754.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:收入   图表   按月   MongoDB

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!