Sử dụng $match để lọc, $gte và $lte cho khoảng ngày, $group để nhóm và tính tổng ($sum) cùng đếm.
Tạo collection với shippingDate và các giá trị:
> db.demo560.insertOne({"value1":40,"value2":40,shippingDate:new ISODate("2020-02-26")});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8f3d5254b4472ed3e8e867") }
> db.demo560.insertOne({"value1":20,"value2":60,shippingDate:new ISODate("2020-02-26")});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8f3d5254b4472ed3e8e868") }
> db.demo560.insertOne({"value1":40,"value2":70,shippingDate:new ISODate("2020-03-31")});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8f3d5254b4472ed3e8e869") }
> db.demo560.insertOne({"value1":40,"value2":130,shippingDate:new ISODate("2020-03-31")});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8f3d5254b4472ed3e8e86a") }
Hiển thị tất cả:
> db.demo560.find();
Aggregate: $match lọc value1=40 và shippingDate từ 2020-02-26 đến 2020-03-31, $group theo shippingDate tính tổng value2 và đếm:
> db.demo560.aggregate([
... {
... $match: {
... "value1": 40,
... "shippingDate": {
... "$gte": ISODate("2020-02-26"),
... "$lte": ISODate("2020-03-31")
... }
... }
... },
... {
... $group: {
... "_id": "$shippingDate",
... total: { "$sum": '$value2' },
... count: { "$sum": 1 }
... }
... }
... ])
Kết quả (2 nhóm ngày, tổng value2 và count):
{ "_id" : ISODate("2020-03-31T00:00:00Z"), "total" : 200, "count" : 2 }
{ "_id" : ISODate("2020-02-26T00:00:00Z"), "total" : 40, "count" : 1 }