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

เรียงลำดับตาม Subdocument ใน MongoDB

เพื่อเรียงลำดับตาม Subdocument ให้ใช้ $sort ใน MongoDB Aggregation Pipeline

สร้างคอลเลกชันพร้อมเอกสารที่มีอาร์เรย์ details (มี typo "deatils" ในเอกสารแรก):

> db.demo245.insertOne( 
...     { 
...         "_id": 101, 
...         "deatils": [ 
...             { "DueDate": new ISODate("2019-01-10"), "Value": 45}, 
...             {"DueDate": new ISODate("2019-11-10"), "Value": 34 } 
...         ] 
...     } 
...); 
{ "acknowledged" : true, "insertedId" : 101 } 
> db.demo245.insertOne( 
...     { 
...         "_id": 102, 
...         "details": [ 
...             { "DueDate": new ISODate("2019-12-11"), "Value": 29}, 
...             {"DueDate": new ISODate("2019-03-10"), "Value": 78} 
...         ] 
...     } 
...); 
{ "acknowledged" : true, "insertedId" : 102 }

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

> db.demo245.find();

ผลลัพธ์:

คำสั่ง Aggregation: $unwind แยกอาร์เรย์ details, $sort เรียงตาม _id แล้ว Value desc, $group รวมกลับ, $sort อีกครั้งตาม Value desc:

> db.demo245.aggregate([ 
...     { "$unwind": "$details" }, 
...     { "$sort": { "_id": 1, "details.Value": -1 } }, 
...     { "$group": { 
...         "_id": "$_id", 
...         "details": { "$push": "$details" } 
...     }}, 
...     { "$sort": { "details.Value": -1 } } 
...])

ผลลัพธ์ - เหลือเฉพาะ _id 102 (เพราะ $sort สุดท้ายเรียงตาม Value desc และอาจมีการกรองนำหน้า) พร้อม details เรียง Value มากไปน้อย: