Możesz użyć agregacji do grupowania według wszystkiego, co można obliczyć na podstawie dokumentów źródłowych, o ile dokładnie wiesz, co chcesz zrobić.
Na podstawie zawartości twojego dokumentu i przykładowych wyników, domyślam się, że sumujesz w odstępach dwudniowych. Oto jak napisać agregację, aby wyprowadzić to na przykładowych danych:
var range1={$and:[{"$gte":["$date","2014-07-07"]},{$lte:["$date","2014-07-08"]}]}
var range2={$and:[{"$gte":["$date","2014-07-09"]},{$lte:["$date","2014-07-10"]}]}
db.range.aggregate(
{$project:{
dateRange:{$cond:{if:range1, then:"dateRange1",else:{$cond:{if:range2, then:"dateRange2", else:"NotInRange"}}}},
value:1}
},
{$group:{_id:"$dateRange", sum:{$sum:"$value"}}}
)
{ "_id" : "dateRange2", "sum" : 45 }
{ "_id" : "dateRange1", "sum" : 49 }
Zastąp swoje daty ciągami z zakresu1 i zakresu2 i opcjonalnie możesz filtrować, zanim zaczniesz operować tylko na dokumentach, które są już w pełnym zakresie, dla którego agregujesz.