คุณสามารถบรรลุสิ่งนี้ได้ด้วยความช่วยเหลือของกรอบงานรวมใน MongoDB เพื่อให้เข้าใจ ให้เราสร้างคอลเลกชันพร้อมเอกสาร แบบสอบถามเพื่อสร้างคอลเลกชันที่มีเอกสารมีดังนี้:
> 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") }
แสดงเอกสารทั้งหมดจากคอลเล็กชันโดยใช้เมธอด find() แบบสอบถามมีดังนี้:
> db.sortInnerArrayDemo.find().pretty();
ต่อไปนี้เป็นผลลัพธ์:
{ "_id" : ObjectId("5c6f07d3da34711ecf87a5b8"), "EmployeeDetails" : { "EmployeeAddress" : { "EmployeeCountry" : [ { "EmployeeZipCode" : 1003, "EmployeeStreetName" : "7885 Trusel Street" }, { "EmployeeZipCode" : 1001, "EmployeeStreetName" : "7390 Gonzales Drive" }, { "EmployeeZipCode" : 1002, "EmployeeStreetName" : "444 N.Myres Rd." } ]} } }
ต่อไปนี้เป็นแบบสอบถามเพื่อจัดเรียงอาร์เรย์ภายใน
กรณีที่ 1 :เรียงลำดับจากน้อยไปมาก
แบบสอบถามมีดังนี้:
> 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();
ต่อไปนี้เป็นผลลัพธ์ที่แสดงอาร์เรย์ภายในถูกเรียงลำดับจากน้อยไปมากตาม EmployeeZipCode:
{ "_id" : ObjectId("5c6f07d3da34711ecf87a5b8"), "EmployeeDetails" : { "EmployeeAddress" : { "EmployeeCountry" : [ { "EmployeeZipCode" : 1001, "EmployeeStreetName" : "7390 Gonzales Drive" }, { "EmployeeZipCode" : 1002, "EmployeeStreetName" : "444 N.Myres Rd." }, { "EmployeeZipCode" : 1003, "EmployeeStreetName" : "7885 Trusel Street" } ] } } }
กรณีที่ 2 :เรียงลำดับจากมากไปหาน้อย
แบบสอบถามมีดังนี้:
> 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();
ต่อไปนี้เป็นผลลัพธ์ที่แสดงอาร์เรย์ภายในถูกเรียงลำดับจากมากไปหาน้อยตาม EmployeeZipCode:
{ "_id" : ObjectId("5c6f07d3da34711ecf87a5b8"), "EmployeeDetails" : { "EmployeeAddress" : { "EmployeeCountry" : [ { "EmployeeZipCode" : 1003, "EmployeeStreetName" : "7885 Trusel Street" }, { "EmployeeZipCode" : 1002, "EmployeeStreetName" : "444 N.Myres Rd." }, { "EmployeeZipCode" : 1001, "EmployeeStreetName" : "7390 Gonzales Drive" } ] } } }