โอเปอเรเตอร์ $unwind ใน Aggregate Framework ใช้ "ลายอาร์เรย์" (deconstruct array) โดยสร้างเอกสารใหม่สำหรับแต่ละสมาชิกในอาร์เรย์ ฟิลด์อื่นๆ จะถูกคัดลอกไปในแต่ละเอกสารใหม่
ตัวอย่างการใช้งาน
สร้างคอลเลกชัน unwindOperatorDemo:
> db.unwindOperatorDemo.insertOne({"StudentName":"Larry","StudentAge":23,"StudentSubject":["C","C++","Java","MongoDB"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5c7ef5f3559dd2396bcfbfc8") }
แสดงข้อมูลต้นฉบับ:
> db.unwindOperatorDemo.find().pretty();
{"_id" : ObjectId("5c7ef5f3559dd2396bcfbfc8"), "StudentName" : "Larry", "StudentAge" : 23, "StudentSubject" : [ "C", "C++", "Java", "MongoDB" ] }
คำสั่ง Aggregate ใช้ $unwind:
> db.unwindOperatorDemo.aggregate(
... { $project : { StudentName : 1 , StudentAge: 1 , StudentSubject : 1 }},
... { $unwind : "$StudentSubject" }
... ).pretty();
{"_id" : ObjectId("5c7ef5f3559dd2396bcfbfc8"), "StudentName" : "Larry", "StudentAge" : 23, "StudentSubject" : "C" }
{"_id" : ObjectId("5c7ef5f3559dd2396bcfbfc8"), "StudentName" : "Larry", "StudentAge" : 23, "StudentSubject" : "C++" }
{"_id" : ObjectId("5c7ef5f3559dd2396bcfbfc8"), "StudentName" : "Larry", "StudentAge" : 23, "StudentSubject" : "Java" }
{"_id" : ObjectId("5c7ef5f3559dd2396bcfbfc8"), "StudentName" : "Larry", "StudentAge" : 23, "StudentSubject" : "MongoDB" }
แต่ละเอกสารผลลัพธ์จะมีค่า StudentSubject เป็นสมาชิกเดี่ยวจากอาร์เรย์เดิม พร้อมคัดลอก StudentName และ StudentAge ไปทุกแถว