Bạn có thể sử dụng tính năng tổng hợp để nhóm theo bất kỳ thứ gì có thể được tính toán từ các tài liệu nguồn, miễn là bạn biết chính xác những gì bạn muốn làm.
Dựa trên nội dung tài liệu và kết quả mẫu của bạn, tôi đoán rằng bạn đang tính tổng theo khoảng thời gian hai ngày. Đây là cách bạn sẽ viết tổng hợp để xuất ra dữ liệu này trên dữ liệu mẫu của bạn:
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 }
Thay thế ngày của bạn cho các chuỗi trong phạm vi1 và phạm vi2 và tùy chọn, bạn có thể lọc trước khi bắt đầu chỉ thao tác trên các tài liệu đã có trong phạm vi đầy đủ mà bạn đang tổng hợp.