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

จัดกลุ่มข้อมูลตามวันที่ (Group by Date) ใน MongoDB Aggregation

การจัดกลุ่มข้อมูลตามวันที่ (วัน/เดือน/ปี) ใช้ $group ร่วมกับ date operators: $dayOfMonth, $month, $year

> db.demo657.insertOne({id: 1, Name: "Chris", DueDate: new ISODate("2020-04-22")});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea064b44deddd72997713d6") }
> db.demo657.insertOne({id: 1, Name: "John", DueDate: new ISODate("2020-04-22")});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea064b44deddd72997713d7") }
> db.demo657.insertOne({id: 1, Name: "Chris", DueDate: new ISODate("2020-04-22")});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea064b44deddd72997713d8") }

แสดงข้อมูล:

> db.demo657.find();

คิวรีจัดกลุ่มตาม วัน/เดือน/ปี

> db.demo657.aggregate([
...   {$match: {id: 1, DueDate: {$gte: new ISODate('2020-04-21'), $lt: new ISODate("2020-04-23")}}},
...   {$project: {day: {$dayOfMonth: "$DueDate"}, month: {$month: "$DueDate"}, year: {$year: "$DueDate"}, Name: "$Name"}},
...   {$group: {_id: {day: "$day", month: "$month", year: "$year"}, ListOfNames: {$push: {Name: "$Name"}}}}
... ]);

ผลลัพธ์:


Date Operators ที่ใช้บ่อย

เคล็ดลับ: ใช้ $dateTrunc (MongoDB 5.0+)

ง่ายกว่าสำหรับการ truncate วันที่:

{$group: {_id: {$dateTrunc: {date: "$DueDate", unit: "day"}}, names: {$push: "$Name"}}}
Operatorคืนค่าตัวอย่าง
$yearปี (4 หลัก)2020
$monthเดือน (1-12)4
$dayOfMonthวัน (1-31)22
$dayOfWeekวันในสัปดาห์ (1=อาทิตย์)3
$hour, $minute, $secondเวลา14, 30, 59