【发布时间】:2015-03-15 17:09:01
【问题描述】:
我正在开发一个简单的财务应用程序来跟踪收入和结果。
为了简单起见,假设这些是我的一些文档:
{ description: "test1", amount: 100, dateEntry: ISODate("2015-01-07T23:00:00Z") }
{ description: "test2", amount: 50, dateEntry: ISODate("2015-01-06T23:00:00Z") }
{ description: "test3", amount: 11, dateEntry: ISODate("2015-01-09T23:00:00Z") }
{ description: "test4", amount: 2, dateEntry: ISODate("2015-01-09T23:00:00Z") }
{ description: "test5", amount: 12, dateEntry: ISODate("2015-01-09T23:00:00Z") }
{ description: "test6", amount: 4, dateEntry: ISODate("2015-01-09T23:00:00Z") }
我现在想要的是根据这些数据绘制一个“余额”图表:
{ day: "2015-01-06", amount: 50 }
{ day: "2015-01-07", amount: 150 }
{ day: "2015-01-09", amount: 179 }
换句话说,我需要按天对我的所有交易进行分组,并且每天我需要汇总我之前的所有交易(从世界之初开始)。
我已经知道如何按天分组了:
$group: {
_id: {
y: {$year:"$dateEntry"},
m: {$month:"$dateEntry"},
d: {$dayOfMonth:"$dateEntry"}
},
sum: ???
}
但我不知道如何返回并汇总所有金额。
假设我需要显示每月余额报告:我是否应该运行 31 次查询,每天一次,将除后几天之外的所有交易金额相加?当然可以,但不要认为这是最好的解决方案。
【问题讨论】:
-
我不知道如何准确地编写查询,尼尔。如果我只是做了 {$sum:"$amount"} 只有当前的组交易将包含在我的结果中,我不希望这样。请仔细阅读问题;)
-
对不起。也许我无法解释我到底想要什么,说真的。我不想要每天所有金额的简单总和。我想总结每天前几天的所有金额。在我的示例中,2015-01-07 是 1 月 6 日和 1 月 7 日金额的总和,2015-01-09 是 1 月 6、7、9 日金额的总和,依此类推。
-
为什么我的问题被否决了?我认为这将是一个有趣的...
-
我真的无法理解......我认为按天分组和求和会给我每天交易的总和,而不是你所说的“加起来”。我的意思是,在 6 时,我将仅对 6 笔交易求和,7 笔仅对 7 笔进行求和,以此类推。
标签: mongodb mongodb-query mapreduce aggregation-framework cumulative-sum