สำหรับการฉายภาพคุณสมบัติที่ซ้อนกันเฉพาะ ให้ใช้ aggregate() ใน MongoDB ให้เราสร้างคอลเลกชันที่มีเอกสารก่อน -
> db.demo379.insertOne( ... { ... "details1" : { ... "details2" : { ... "details3" : { ... "10" : "John", ... "50" : "Chris", ... "40" : "David", ... "30":"Mike" ... } ... } ... } ... } ... ); { "acknowledged" : true, "insertedId" : ObjectId("5e5a94f82ae06a1609a00b10") }
แสดงเอกสารทั้งหมดจากคอลเล็กชันโดยใช้วิธี find() -
> db.demo379.find().pretty();
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
{ "_id" : ObjectId("5e5a94f82ae06a1609a00b10"), "details1" : { "details2" : { "details3" : { "10" : "John", "30" : "Mike", "40" : "David", "50" : "Chris" } } } }
ต่อไปนี้เป็นแบบสอบถามสำหรับการฉายบนคุณสมบัติที่ซ้อนกันเฉพาะ -
> db.demo379.aggregate([ ... { "$addFields": { ... "details1.details2.details3": { ... "$arrayToObject": { ... "$filter": { ... "input": { "$objectToArray": "$details1.details2.details3" }, ... "as": "out", ... "cond": { ... "$and": [ ... { "$gte": ["$$out.k", "35"] }, ... { "$lte": ["$$out.k", "60"] }, ... ] ... } ... } ... } ... } ... } } ... ])
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
{ "_id" : ObjectId("5e5a94f82ae06a1609a00b10"), "details1" : { "details2" : { "details3" : { "40" : "David", "50" : "Chris" } } } }