สำหรับการฉายภาพคุณสมบัติที่ซ้อนกันเฉพาะ ให้ใช้ 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" } } } }