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

MongoDB Aggregate JSON array field สำหรับฟิลด์ที่ตรงกันของคอลเล็กชันอื่นหรือไม่


สำหรับสิ่งนี้ ให้สร้างสองคอลเลกชันและเพิ่มเอกสาร หลังจากนั้น ใช้ $lookup เพื่อจับคู่ ให้เราสร้างคอลเลกชันที่มีเอกสาร -

> db.demo101.insertOne(... { "_id" :"1", "Details" :[ { "PId" :"200" }, { "PId" :"201" }, { "PId" " :"201" } ] }... ){ "acknowledged" :true, "insertedId" :"1" }

แสดงเอกสารทั้งหมดจากคอลเล็กชันโดยใช้วิธี find() -

> db.demo101.find();

สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -

{ "_id" :"1", "Details" :[ { "PId" :"200" }, { "PId" :"201" }, { "PId" :"201" } ] } 

ต่อไปนี้เป็นแบบสอบถามเพื่อสร้างคอลเลกชันที่สองกับเอกสารบางส่วน -

> db.demo102.insertOne(... { "_id" :"201", "CustEmailId" :"Carol@gmail.com" }... );{ "acknowledged" :true, "insertedId" :"201" }

แสดงเอกสารทั้งหมดจากคอลเล็กชันโดยใช้วิธี find() -

> db.demo102.find();

สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -

{ "_id" :"200", "CustEmailId" :"John@gmail.com" }{ "_id" :"201", "CustEmailId" :"Carol@gmail.com" }

ต่อไปนี้เป็นแบบสอบถามเพื่อรวมฟิลด์อาร์เรย์ JSON สำหรับฟิลด์ที่ตรงกันของคอลเลกชันอื่น ๆ -

> db.demo101.aggregate(... [... {$unwind:"$Details"},... {$lookup :{from :"demo102", "localField":"Details.PId" , "foreignField":"_id" เป็น :"out"}},... {$project :{"_id":1, "Details.PId":{$arrayElemAt:["$out.CustEmailId",0 ]}}},... {$group:{_id:"$_id", รายละเอียด :{$push :"$Details"}}}... ]... ).pretty()

สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -

{ "_id" :"1", "Details" :[ { "PId" :"John@gmail.com" }, { "PId" :"Carol@gmail.com" }, { "PId" :"Carol@gmail.com" } ]}