Sử dụng aggregation với $unwind và $group để nhóm và đếm các ngày trùng lặp trong mảng lồng nhau. Tạo collection đơn hàng:
> db.demo717.insertOne({
... "shippingdetails": [
... { duedate:"2020-04-29 22:33:04" },
... { duedate:"2020-03-29 22:33:04" },
... { duedate:"2020-04-29 22:33:04" },
... { duedate:"2020-01-29 22:33:04" }
... ]
... });
{ "acknowledged" : true, "insertedId" : ObjectId("5ea9b3cd85324c2c98cc4c30") }
Hiển thị dữ liệu:
> db.demo717.find().pretty();
{ "_id" : ObjectId("5ea9b3cd85324c2c98cc4c30"), "shippingdetails" : [ { "duedate" : "2020-04-29 22:33:04" }, { "duedate" : "2020-03-29 22:33:04" }, { "duedate" : "2020-04-29 22:33:04" }, { "duedate" : "2020-01-29 22:33:04" } ] }
Pipeline aggregation nhóm theo ngày và đếm:
> db.demo717.aggregate([
... { $unwind: "$shippingdetails" },
... { $group: {
... _id: "$shippingdetails.duedate",
... count: { $sum: 1 }
... }}
... ]);
Kết quả:
{ "_id" : "2020-01-29 22:33:04", "count" : 1 }
{ "_id" : "2020-03-29 22:33:04", "count" : 1 }
{ "_id" : "2020-04-29 22:33:04", "count" : 2 }
Ứng dụng: Thống kê số đơn hàng theo ngày giao, phân tích tần suất sự kiện, báo cáo theo thời gian.