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

คำสั่ง MongoDB เดียวสำหรับเรียงลำดับตามวันที่และจัดกลุ่มตามผู้ใช้

ใช้ aggregate() ใน MongoDB เพื่อทำการจัดกลุ่ม (Group) และหาค่าสูงสุด/ต่ำสุดของวันที่ในครั้งเดียว

สร้างคอลเลกชันพร้อมเอกสาร:

> db.demo243.insertOne({"userId":1,dueDate:new ISODate("2019-01-10")}); 
{ "acknowledged" : true, "insertedId" : ObjectId("5e4575f81627c0c63e7dba5f") } 
> db.demo243.insertOne({"userId":2,dueDate:new ISODate("2019-11-10")}); 
{ "acknowledged" : true, "insertedId" : ObjectId("5e4576011627c0c63e7dba60") } 
> db.demo243.insertOne({"userId":2,dueDate:new ISODate("2020-01-31")}); 
{ "acknowledged" : true, "insertedId" : ObjectId("5e4576151627c0c63e7dba61") } 
> db.demo243.insertOne({"userId":1,dueDate:new ISODate("2010-01-10")}); 
{ "acknowledged" : true, "insertedId" : ObjectId("5e45761b1627c0c63e7dba62") }

แสดงเอกสารทั้งหมด:

> db.demo243.find();

ผลลัพธ์:

{ "_id" : ObjectId("5e4575f81627c0c63e7dba5f"), "userId" : 1, "dueDate" : ISODate("2019-01-10T00:00:00Z") } 
{ "_id" : ObjectId("5e4576011627c0c63e7dba60"), "userId" : 2, "dueDate" : ISODate("2019-11-10T00:00:00Z") } 
{ "_id" : ObjectId("5e4576151627c0c63e7dba61"), "userId" : 2, "dueDate" : ISODate("2020-01-31T00:00:00Z") } 
{ "_id" : ObjectId("5e45761b1627c0c63e7dba62"), "userId" : 1, "dueDate" : ISODate("2010-01-10T00:00:00Z") }

คำสั่ง Aggregation สำหรับจัดกลุ่มตาม userId และหาวันที่ล่าสุด (max dueDate) ของแต่ละผู้ใช้:

> db.demo243.aggregate({ 
...     $group: { 
...         _id : '$userId', 
...         dueDate: { $max: '$dueDate'} 
...     } 
...})

ผลลัพธ์ - แสดง userId พร้อมวันที่ล่าสุดของแต่ละคน (เรียงตามค่า _id อัตโนมัติ):

{ "_id" : 2, "dueDate" : ISODate("2020-01-31T00:00:00Z") } 
{ "_id" : 1, "dueDate" : ISODate("2019-01-10T00:00:00Z") }