Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Lấy dữ liệu giữa hai ngày và giá trị cụ thể, nhóm tính tổng và đếm trong MongoDB

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 }