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

วิธี Sort Inner Array ใน MongoDB ด้วย Aggregation

ใช้ Aggregation Framework: $unwind แยก Array → $sort เรียงลำดับ → $group รวมกลับ → $project จัดรูปแบบ

สร้างข้อมูลตัวอย่าง (Deep Nested Array)


> db.sortInnerArrayDemo.insertOne({
    "EmployeeDetails": {
        "EmployeeAddress": {
            "EmployeeCountry": [
                {"EmployeeZipCode": 1003, "EmployeeStreetName": "7885 Trusel Street"},
                {"EmployeeZipCode": 1001, "EmployeeStreetName": "7390 Gonzales Drive"},
                {"EmployeeZipCode": 1002, "EmployeeStreetName": "444 N.Myres Rd."}
            ]
        }
    }
});
{ "acknowledged" : true, "insertedId" : ObjectId("5c6f07d3da34711ecf87a5b8") }

แสดงข้อมูลก่อน Sort (ZipCode ไม่เรียง: 1003, 1001, 1002)


> db.sortInnerArrayDemo.find().pretty();

Case 1: Sort Ascending (น้อยไปมาก) ตาม ZipCode


> db.sortInnerArrayDemo.aggregate([
    {$unwind: "$EmployeeDetails.EmployeeAddress.EmployeeCountry"},
    {$sort: {"EmployeeDetails.EmployeeAddress.EmployeeCountry.EmployeeZipCode": 1}},
    {$group: {_id: "$_id", "EmpCountry": {$push: "$EmployeeDetails.EmployeeAddress.EmployeeCountry"}}},
    {$project: {"EmployeeDetails.EmployeeAddress.EmployeeCountry": "$EmpCountry"}}
]).pretty();

ผลลัพธ์ Ascending (1001, 1002, 1003)


"EmployeeCountry" : [
    {"EmployeeZipCode" : 1001, "EmployeeStreetName" : "7390 Gonzales Drive"},
    {"EmployeeZipCode" : 1002, "EmployeeStreetName" : "444 N.Myres Rd."},
    {"EmployeeZipCode" : 1003, "EmployeeStreetName" : "7885 Trusel Street"}
]

Case 2: Sort Descending (มากไปน้อย) ตาม ZipCode


> db.sortInnerArrayDemo.aggregate([
    {$unwind: "$EmployeeDetails.EmployeeAddress.EmployeeCountry"},
    {$sort: {"EmployeeDetails.EmployeeAddress.EmployeeCountry.EmployeeZipCode": -1}},
    {$group: {_id: "$_id", "EmpCountry": {$push: "$EmployeeDetails.EmployeeAddress.EmployeeCountry"}}},
    {$project: {"EmployeeDetails.EmployeeAddress.EmployeeCountry": "$EmpCountry"}}
]).pretty();

ผลลัพธ์ Descending (1003, 1002, 1001)


"EmployeeCountry" : [
    {"EmployeeZipCode" : 1003, "EmployeeStreetName" : "7885 Trusel Street"},
    {"EmployeeZipCode" : 1002, "EmployeeStreetName" : "444 N.Myres Rd."},
    {"EmployeeZipCode" : 1001, "EmployeeStreetName" : "7390 Gonzales Drive"}
]

Pipeline นี้ Sort Array ภายใน Document ได้ แม้จะ Nested หลายชั้น