เพื่อเรียงลำดับอาร์เรย์ ใช้ $sort สำหรับการโปรเจกต์ (Projection) ใช้ $project ใน aggregate() ของ MongoDB
สร้างคอลเลกชันพร้อมเอกสารที่มีอาร์เรย์ Values:
> db.demo252.insertOne(
... {"Values" : [ { "v1" : 20, "v2" :30 }, { "v1" : 20, "v2" : 20 }, { "v1" : 10, "v2" : 7 } ] }
... );
{ "acknowledged" : true, "insertedId" : ObjectId("5e46c2761627c0c63e7dba78") }
แสดงเอกสารทั้งหมด:
> db.demo252.find();
ผลลัพธ์ - อาร์เรย์ Values ยังไม่ได้เรียงลำดับ:
คำสั่ง Aggregation: ใช้ $unwind แยกอาร์เรย์, $sort เรียงตาม v2 แล้ว v1, $group รวมกลับเป็นอาร์เรย์, $project ปรับรูปแบบ _id:
> db.demo252.aggregate([ ... { "$unwind": "$Values"}, ... { "$sort": {"Values.v2":1, "Values.v1": 1}}, ... { "$group": { ... "_id": { "_id": "$_id" }, ... "st": { "$push":"$Values"} ... }}, ... { "$project": { ... "_id": "$_id._id", ... "Values": "$st" ... }} ...]);ผลลัพธ์ - อาร์เรย์ Values ถูกเรียงลำดับตาม v2 แล้ว v1 จากน้อยไปมาก: