কম্পিউটার টিউটোরিয়াল

MongoDB-এ সাব-ডকুমেন্ট ফিল্টার করে ডকুমেন্ট রিটার্ন করা


অ্যারে সাব-ডকুমেন্ট ফিল্টার: $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+ এ উপলব্ধ।

  1. জাভাস্ক্রিপ্টে কুকি পড়া

  2. MongoDB-এ ডেটাসহ ডকুমেন্ট ইনসার্ট করা

  3. MongoDB শেল (mongo command) চালু করার পদ্ধতি

  4. জাভা ব্যবহার করে MongoDB ডকুমেন্ট কীভাবে ডিলিট করবেন?