ในการคลี่คลาย หมายถึงการแยกส่วนฟิลด์อาร์เรย์ออกจากเอกสารอินพุตเพื่อส่งออกเอกสารสำหรับแต่ละองค์ประกอบ
หากต้องการคลายอาร์เรย์ ให้ใช้ $unwind ในการรวม MongoDB ให้เราสร้างคอลเลกชันที่มีเอกสารก่อน -
> db.demo387.insertOne(... {...... "Name" :"101",... "Details1" :[... {Value:100, Value1:50, Value2:40},... {Value:200},... {Value:300}... ],... "รายละเอียด" :[... {Value:100, Value1:30, Value2:26}, ... {Value:200},... {Value:300}... ]... }... );{ "acknowledged" :true, "insertedId" :ObjectId("5e5d197022064be7ab44e7f8")}ก่อน>แสดงเอกสารทั้งหมดจากคอลเล็กชันโดยใช้วิธี find() -
> db.demo387.find().pretty();สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
{ "_id" :ObjectId("5e5d197022064be7ab44e7f8"), "Name" :"101", "Details1" :[ { "Value" :100, "Value1" :50, "Value2" :40 }, { " ค่า" :200 }, { "ค่า" :300 } ], "รายละเอียด" :[ { "ค่า" :100, "ค่า1" :30, "ค่า2" :26 }, { "ค่า" :200 }, { " ค่า" :300 } ]}ต่อไปนี้เป็นแบบสอบถามเพื่อรวมเอกสารที่มีมากกว่า 1 อาร์เรย์ -
> db.demo387.aggregate([... { "$unwind":"$Details1" },... { "$unwind":"$Details" },... { "$match":{ "$expr":... { "$eq":["$Details1.Value", "$Details.Value"] }... }}... ])สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
{ "_id" :ObjectId("5e5d197022064be7ab44e7f8"), "Name" :"101", "Details1" :{ "Value" :100, "Value1" :50, "Value2" :40 }, "Details" :{ "ค่า" :100, "ค่า1" :30, "ค่า2" :26 } }{ "_id" :ObjectId("5e5d197022064be7ab44e7f8"), "ชื่อ" :"101", "รายละเอียด1" :{ "ค่า" :200 } "รายละเอียด" :{ "ค่า" :200 } }{ "_id" :ObjectId("5e5d197022064be7ab44e7f8"), "ชื่อ" :"101", "รายละเอียด1" :{ "ค่า" :300 }, "รายละเอียด" :{ "ค่า" :300 } }