ใช้ $unwind และ $out ใน Aggregate Pipeline
$unwind แยกอาร์เรย์เป็นหลายเอกสาร แล้ว $out เขียนผลลัพธ์ไปยังคอลเลกชันใหม่
สร้างข้อมูลตัวอย่าง
> db.demo757.insertOne({ "id": 101, "Name": ["John", "Bob", "Chris"] });
> db.demo757.insertOne({ "id": 102, "Name": ["David"] });
แสดงข้อมูลก่อนแปลง
> db.demo757.find();
ผลลัพธ์:
{ "_id" : ObjectId("5eb025745637cd592b2a4ae2"), "id" : 101, "Name" : [ "John", "Bob", "Chris" ] }
{ "_id" : ObjectId("5eb025755637cd592b2a4ae3"), "id" : 102, "Name" : [ "David" ] }
คิวรีแปลงและสร้างคอลเลกชันใหม่ demo758
> db.demo757.aggregate([
{$unwind: '$Name'},
{$project: {_id: 0}},
{$out: 'demo758'}
])
> db.demo758.find();
ผลลัพธ์ในคอลเลกชัน demo758
{ "_id" : ObjectId("5eb02582192bedc4738b5881"), "id" : 101, "Name" : "John" }
{ "_id" : ObjectId("5eb02582192bedc4738b5882"), "id" : 101, "Name" : "Bob" }
{ "_id" : ObjectId("5eb02582192bedc4738b5883"), "id" : 101, "Name" : "Chris" }
{ "_id" : ObjectId("5eb02582192bedc4738b5884"), "id" : 102, "Name" : "David" }