หากต้องการผ่อนคลาย ให้ใช้ $unwind $unwind แยกโครงสร้างฟิลด์อาร์เรย์ออกจากเอกสารอินพุตเพื่อส่งออกเอกสารสำหรับแต่ละองค์ประกอบ
ให้เราสร้างคอลเลกชันที่มีเอกสาร -
> db.demo515.insertOne( ... { ... "details1": [ ... "4700100004" ... ], ... "details2": [ ... "Not Given" ... ], ... "Value1": [ ... "56", ... "45", ... "35", ... ], ... "Value2": [ ... "35", ... "45", ... "56", ... ]} ... ); { "acknowledged" : true, "insertedId" : ObjectId("5e889e51987b6e0e9d18f590") }
แสดงเอกสารทั้งหมดจากคอลเล็กชันโดยใช้วิธี find() -
> db.demo515.find();
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
{ "_id" : ObjectId("5e889e51987b6e0e9d18f590"), "details1" : [ "4700100004" ], "details2" : [ "Not Given" ], "Value1" : [ "56", "45", "35" ], "Value2" : [ "35", "45", "56" ] }
ต่อไปนี้เป็นแบบสอบถามเพื่อคลายสองอาร์เรย์ -
> db.demo515.aggregate([ ... { $unwind: { path: "$Value1", includeArrayIndex : "index1" } }, ... { $unwind: { path: "$Value2", includeArrayIndex : "index2" } }, ... { $project: { ... _id : 1, ... details1: 1, ... details2: 1, ... Value1: 1, ... Value2: 1, ... valid: { $eq: ["$index1", "$index2"] } } ... }, ... { $match: { valid: true } } ... ]);
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
{ "_id" : ObjectId("5e889e51987b6e0e9d18f590"), "details1" : [ "4700100004" ], "details2" : [ "Not Given" ], "Value1" : "56", "Value2" : "35", "valid" : true } { "_id" : ObjectId("5e889e51987b6e0e9d18f590"), "details1" : [ "4700100004" ], "details2" : [ "Not Given" ], "Value1" : "45", "Value2" : "45", "valid" : true } { "_id" : ObjectId("5e889e51987b6e0e9d18f590"), "details1" : [ "4700100004" ], "details2" : [ "Not Given" ], "Value1" : "35", "Value2" : "56", "valid" : true }