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

MongoDB Aggregation-এ নির্দিষ্ট ফিল্ড মান অনুযায়ী ডকুমেন্ট ফিল্টার করা

MongoDB Aggregation Pipeline-এ $unwind, $match, এবং $project স্টেজ ব্যবহার করে একটি ডকুমেন্টের ভেতরের অ্যারে থেকে নির্দিষ্ট ফিল্ড মান (যেমন Age: 21) অনুযায়ী সাবডকুমেন্ট বের করা হয়।

উদাহরণ: কালেকশন ও ডেটা তৈরি

> db.demo685.insertOne({
    "details": [
      { Name: "Chris", Age: 21 },
      { Name: "David", Age: 23 },
      { Name: "Bob", Age: 21 }
    ]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea54f6fa7e81adc6a0b395b") }

সব ডকুমেন্ট দেখানো

> db.demo685.find();

আউটপুট:

{ "_id" : ObjectId("5ea54f6fa7e81adc6a0b395b"), "details" : [
    { "Name" : "Chris", "Age" : 21 },
    { "Name" : "David", "Age" : 23 },
    { "Name" : "Bob", "Age" : 21 }
] }

Aggregation কোয়েরি: Age = 21 वाले সাবডকুমেন্ট বের করা

> db.demo685.aggregate([
    { $unwind: "$details" },
    { $match: { "details.Age": 21 } },
    { $project: { _id: 0 } }
]).pretty();

কোয়েরির ব্যাখ্যা

  1. $unwind: "$details" — details অ্যারেতে থাকা ৩টি সাবডকুমেন্টকে ৩টি আলাদা ডকুমেন্টে রূপান্তর করে।
  2. $match: { "details.Age": 21 } — Age: 21 वाले সাবডকুমেন্টগুলো ফিল্টার করে।
  3. $project: { _id: 0 } — _id ফিল্ড বাদ দেয় (শুধু details অবজেক্ট দেখাবে)।

আউটপুট

{ "details" : { "Name" : "Chris", "Age" : 21 } }
{ "details" : { "Name" : "Bob", "Age" : 21 } }

মূল পয়েন্টসমূহ

  • $unwind অ্যারে ডিকনস্ট্রাক্ট করার জন্য আবশ্যক।
  • $match এগরিগেশন পাইপলাইনের মাঝপথে ব্যবহার করা যায় (ফিল্টার করার জন্য)।
  • $project: { _id: 0 } আউটপুট থেকে _id বাদ দেয়।
  • আউটপুটে প্রতিটি সাবডকুমেন্ট আলাদা ডকুমেন্ট হিসেবে আসে (অ্যারে নয়)।
  • অরিজিনাল ডকুমেন্টের _id রাখতে চাইলে $project: { _id: 1, details: 1 } ব্যবহার করুন।
  1. MongoDB-তে নির্দিষ্ট মান থেকে বড় বা সমান ভ্যালু খোঁজা ($gte)

  2. MongoDB-তে $in অপারেটর ব্যবহার করে নির্দিষ্ট একাধিক ডকুমেন্ট বের করা

  3. MongoDB-এ নির্দিষ্ট সংখ্যা থেকে বড় ফিল্ড ভ্যালু वाले ডকুমেন্ট ফেচ করা

  4. MongoDB-এ অ্যারে কোয়েরি করে নির্দিষ্ট ভ্যালু ফেচ করা