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

โอเปอเรเตอร์ $unwind ใน MongoDB คืออะไร

โอเปอเรเตอร์ $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 ไปทุกแถว