MongoDB অগ্রেশন পাইপলাইনে গভীর নেস্টেড ফিল্ডে প্রজেকশন
গভীর নেস্টেড অবজেক্টে নির্দিষ্ট কী-ভ্যালু পেয়ার (যেমন কী ৩৫-৬০ এর মধ্যে) ফিল্টার করে প্রজেক্ট করার জন্য অগ্রেশন পাইপলাইনে $addFields, $objectToArray, $filter, $arrayToObject ব্যবহার করা হয়।
উদাহরণ: গভীর নেস্টেড অবজেক্ট সহ ডকুমেন্ট
> db.demo379.insertOne({ "details1" : { "details2" : { "details3" : { "10" : "John", "50" : "Chris", "40" : "David", "30" : "Mike" } } } });
{ "acknowledged" : true, "insertedId" : ObjectId("5e5a94f82ae06a1609a00b10") }
প্রজেকশন করার আগে
> 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"] }
]
}
}
}
}
}}
])
ফলাফল (শুধু 40 এবং 50)
{ "_id" : ObjectId("5e5a94f82ae06a1609a00b10"), "details1" : { "details2" : { "details3" : { "40" : "David", "50" : "Chris" } } } }
পাইপলাইন ব্যাখ্যা
$objectToArray: নেস্টেড অবজেক্টকে কী-ভ্যালু অ্যারেতে রূপান্তর:[{k:"10",v:"John"}, {k:"50",v:"Chris"}, ...]।$filter:$andদিয়ে কী (স্ট্রিং) ৩৫-৬০ এর মধ্যে ফিল্টার।$arrayToObject: ফিল্টার করা অ্যারেকে আবার অবজেক্টে রূপান্তর।$addFields: মূল ডকুমেন্টে ফিল্ড আপডেট/রিপ্লেস।
নোট: কীগুলো স্ট্রিং হলে স্ট্রিং কম্পারিশন হয় ("35" < "40" < "50" < "60")। নাম্বার কী হলে $toInt ব্যবহার করুন।