অ্যারে সাব-ডকুমেন্ট ফিল্টার: $filter
MongoDB-এ একটি ডকুমেন্টের মধ্যে থাকা অ্যারে সাব-ডকুমেন্টগুলো থেকে নির্দিষ্ট শর্ত অনুযায়ী শুধু মিলে যাওয়া সাব-ডকুমেন্টগুলো রিটার্ন করতে অ্যাগ্রিগেশনে $project এবং $filter ব্যবহার করা হয়।
নমুনা ডেটা তৈরি
> db.demo457.insertOne({ _id: 101, details: [{ ProductName: "Product-1", ProductPrice: 90 }, { ProductName: "Product-2", ProductPrice: 190 }] })
> db.demo457.insertOne({ _id: 102, details: [{ ProductName: "Product-3", ProductPrice: 150 }, { ProductName: "Product-4", ProductPrice: 360 }] })
সমস্ত ডকুমেন্ট দেখানো
> db.demo457.find()
আউটপুট:
{ "_id": 101, "details": [{ "ProductName": "Product-1", "ProductPrice": 90 }, { "ProductName": "Product-2", "ProductPrice": 190 }] }
{ "_id": 102, "details": [{ "ProductName": "Product-3", "ProductPrice": 150 }, { "ProductName": "Product-4", "ProductPrice": 360 }] }
সাব-ডকুমেন্ট ফিল্টার করার কোয়েরি
> db.demo457.aggregate([
{ $project: {
details: {
$filter: {
input: "$details",
as: "output",
cond: { $gte: ["$$output.ProductPrice", 170] }
}
}
}}
])
ফলাফল:
{ "_id": 101, "details": [{ "ProductName": "Product-2", "ProductPrice": 190 }] }
{ "_id": 102, "details": [{ "ProductName": "Product-4", "ProductPrice": 360 }] }
ব্যাখ্যা
$filter: অ্যারে (input) এর প্রতিটি এলিমেন্ট (as: "output") শর্ত (cond) অনুযায়ী ফিল্টার করে$$output.ProductPrice: ভেরিয়েবল রেফারেন্স (ডবল ডলার সাইন)- মূল ডকুমেন্টের
_idবজায় থাকে, শুধুdetailsঅ্যারে ফিল্টার হয় - এটি
$unwind+$match+$groupএর চেয়ে সহজ এবং দ্রুত
MongoDB 3.2+ এ উপলব্ধ।