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

การจัดเรียงข้อมูลใน Sub-array ด้วย $sort ใน MongoDB Aggregation

เพื่อจัดเรียงข้อมูลภายใน Sub-array ต้องใช้ Aggregation Pipeline โดยทำ $unwind ก่อน แล้วค่อย $sort และ $group กลับไปเป็นอาร์เรย์

ตัวอย่างข้อมูลทดสอบ

> db.demo23.insertOne({
    "StudentDetails" : [
        {"Name" : "David", "Age" : 23},
        {"Name" : "Adam", "Age" : 24}
    ]
});

แสดงข้อมูลก่อนจัดเรียง

> db.demo23.find().pretty()
{
    "_id" : ObjectId("5e14c3eb22d07d3b95082e71"),
    "StudentDetails" : [
        {"Name" : "David", "Age" : 23},
        {"Name" : "Adam", "Age" : 24}
    ]
}

คำสั่ง Aggregation สำหรับจัดเรียง Sub-array

> db.demo23.aggregate([
    { "$unwind" : "$StudentDetails" },
    { "$sort" : { "StudentDetails.Name" : 1 }},
    { "$group" : {
        "StudentDetails" : { "$push" : { "Name" : "$StudentDetails.Name" }},
        "_id" : null
    }},
    { "$project" : { "_id" : 0, "StudentDetails" : 1 }}
]);

ผลลัพธ์หลังจัดเรียงตามชื่อ A-Z

{
    "StudentDetails" : [
        { "Name" : "Adam" },
        { "Name" : "David" }
    ]
}

ขั้นตอนสำคัญ:

  1. $unwind - แยกอาร์เรย์เป็นเอกสารแยกต่างหาก
  2. $sort - จัดเรียงตามฟิลด์ที่ต้องการ
  3. $group - รวมกลับเป็นอาร์เรย์ด้วย $push
  4. $project - จัดรูปแบบผลลัพธ์สุดท้าย