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

Nhóm theo ngày/tuần/tháng dựa trên khoảng thời gian trong MongoDB

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 }