เชื่อมต่อรายการย่อยแบบลึกโดยใช้ aggregate() พร้อมกับ $unwind ให้เราสร้างคอลเลกชันที่มีเอกสาร -
> db.demo70.insertOne( ... { ... ... "first" : [ ... { ... "details" : { ... "second" : [ ... { ... "StudentDetails" : { ... "Score" : 10 ... } ... }, ... { ... "StudentDetails" : { ... "Score" : 20 ... } ... }, ... { ... "StudentDetails" : { ... "Score" : 30 ... } ... } ... ] ... } ... }, ... { ... "details" : { ... "second" : [ ... { ... "StudentDetails" : { ... "Score" : 11 ... } ... }, ... { ... "StudentDetails" : { ... "Score" : 18 ... } ... }, ... { ... "StudentDetails" : { ... "Score" : 29 ... } ... } ... ] ... } ... } ... ] ... } ... ); { "acknowledged" : true, "insertedId" : ObjectId("5e29ad4d0912fae76b13d76d") }
แสดงเอกสารทั้งหมดจากคอลเล็กชันโดยใช้วิธี find() -
> db.demo70.find().pretty();
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
{ "_id" : ObjectId("5e29ad4d0912fae76b13d76d"), "first" : [ { "details" : { "second" : [ { "StudentDetails" : { "Score" : 10 } }, { "StudentDetails" : { "Score" : 20 } }, { "StudentDetails" : { "Score" : 30 } } ] } }, { "details" : { "second" : [ { "StudentDetails" : { "Score" : 11 } }, { "StudentDetails" : { "Score" : 18 } }, { "StudentDetails" : { "Score" : 29 } } ] } } ] }
ต่อไปนี้เป็นแบบสอบถามเพื่อเชื่อมรายการย่อยลึก -
> db.demo70.aggregate([ ... { $unwind: "$first" }, ... { $unwind: "$first.details.second" }, ... { $sort: { "first.details.second.StudentDetails.Score": -1 } }, ... { $limit: 3 }, ... { $replaceRoot: { newRoot: "$first.details.second.StudentDetails" } }, ... { $sort: { "Score": 1 } } ... ]);
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
{ "Score" : 20 } { "Score" : 29 } { "Score" : 30 }