I am developing a simple financial application for tracking income and results.
For simplicity, suppose these are some of my docs:
{ "_id" : ObjectId("54adc0659413535e02fba115"), "description" : "test1", "amount" : 100, "dateEntry" : ISODate("2015-01-07T23:00:00Z") } { "_id" : ObjectId("54adc21a0d150c760270f99c"), "description" : "test2", "amount" : 50, "dateEntry" : ISODate("2015-01-06T23:00:00Z") } { "_id" : ObjectId("54b05da766341e4802b785c0"), "description" : "test3", "amount" : 11, "dateEntry" : ISODate("2015-01-09T23:00:00Z") } { "_id" : ObjectId("54b05db066341e4802b785c1"), "description" : "test4", "amount" : 2, "dateEntry" : ISODate("2015-01-09T23:00:00Z") } { "_id" : ObjectId("54b05dbb66341e4802b785c2"), "description" : "test5", "amount" : 12, "dateEntry" : ISODate("2015-01-09T23:00:00Z") } { "_id" : ObjectId("54b05f4ee0933a5c02398d55"), "description" : "test6", "amount" : 4, "dateEntry" : ISODate("2015-01-09T23:00:00Z") }
Now I would like to draw a “balance” based on such data:
[ { day:'2015-01-06', amount:50}, { day:'2015-01-07', amount:150}, { day:'2015-01-09', amount:179}, ... ]
In other words, I need to group all my transactions in the afternoon, and for each day I need to summarize all my previous transactions (from the very beginning of the world).
I already know how to group by day:
$group: { _id: { y: {$year:"$dateEntry"}, m: {$month:"$dateEntry"}, d: {$dayOfMonth:"$dateEntry"} }, sum: ??? }
But I do not know how to return and summarize all the amounts. Imagine that I need to show a monthly balance report: should I run 31 requests, one for each day, summing up the entire transaction amount, except for the following days? Of course I can, but I don't think the best solution.
Thanks in advance!