Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

จัดกลุ่มตามวัน/เดือน/สัปดาห์ตามช่วงวันที่ใน MongoDB


หากต้องการจัดกลุ่ม ให้ใช้ $week และ $month ใน MongoDB ให้เราสร้างคอลเลกชันที่มีเอกสาร -

> db.demo133.insertOne({"Rank":18,"DueDate":new ISODate("2020-01-10")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e31980968e7f832db1a7f78")
}
> db.demo133.insertOne({"Rank":12,"DueDate":new ISODate("2020-01-10")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e31982568e7f832db1a7f79")
}
> db.demo133.insertOne({"Rank":12,"DueDate":new ISODate("2020-02-01")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e31986568e7f832db1a7f7a")
}
> db.demo133.insertOne({"Rank":20,"DueDate":new ISODate("2020-02-01")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e31986c68e7f832db1a7f7b")
}

แสดงเอกสารทั้งหมดจากคอลเล็กชันโดยใช้วิธี find() -

> db.demo133.find();

สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -

{ "_id" : ObjectId("5e31980968e7f832db1a7f78"), "Rank" : 18, "DueDate" : ISODate("2020-01-10T00:00:00Z") }
{ "_id" : ObjectId("5e31982568e7f832db1a7f79"), "Rank" : 12, "DueDate" : ISODate("2020-01-10T00:00:00Z") }
{ "_id" : ObjectId("5e31986568e7f832db1a7f7a"), "Rank" : 12, "DueDate" : ISODate("2020-02-01T00:00:00Z") }
{ "_id" : ObjectId("5e31986c68e7f832db1a7f7b"), "Rank" : 20, "DueDate" : ISODate("2020-02-01T00:00:00Z") }

ต่อไปนี้เป็นแบบสอบถามเพื่อจัดกลุ่มตามวัน/เดือน/สัปดาห์ตามช่วงวันที่ -

> db.demo133.aggregate([
...    {
...       "$project": {
...          "DueDateWeek": { "$week": "$DueDate" },
...          "DueDateMonth": { "$month": "$DueDate" },
...          "Rank": 1
...       }
...    },
... {
...    "$group": {
...       "_id": "$DueDateWeek",
...       "AvgValue": { "$avg": "$Rank" },
...       "MonthValue": { "$first": "$DueDateMonth" }
...       }
...    }
... ])

สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -

{ "_id" : 4, "AvgValue" : 16, "MonthValue" : 2 }
{ "_id" : 1, "AvgValue" : 15, "MonthValue" : 1 }