Sử dụng các toán tử ngày tháng trong aggregate: $week, $month, $dayOfMonth để nhóm dữ liệu theo khoảng thời gian.
Tạo collection demo133 với trường DueDate kiểu ISODate:
> db.demo133.insertOne({"Rank":18,"DueDate":new ISODate("2020-01-10")});
> db.demo133.insertOne({"Rank":12,"DueDate":new ISODate("2020-01-10")});
> db.demo133.insertOne({"Rank":12,"DueDate":new ISODate("2020-02-01")});
> db.demo133.insertOne({"Rank":20,"DueDate":new ISODate("2020-02-01")});
Pipeline aggregate: project thêm tuần/tháng, sau đó group theo tuần tính trung bình Rank:
> db.demo133.aggregate([
{
"$project": {
"DueDateWeek": { "$week": "$DueDate" },
"DueDateMonth": { "$month": "$DueDate" },
"Rank": 1
}
},
{
"$group": {
"_id": "$DueDateWeek",
"AvgValue": { "$avg": "$Rank" },
"MonthValue": { "$first": "$DueDateMonth" }
}
}
])
Kết quả: tuần 1 (tháng 1) trung bình 15, tuần 4 (tháng 2) trung bình 16:
{ "_id" : 4, "AvgValue" : 16, "MonthValue" : 2 }
{ "_id" : 1, "AvgValue" : 15, "MonthValue" : 1 }