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

MongoDB-এ সাবডকুমেন্ট অ্যারে থেকে রেজেক্স (Regex) ব্যবহার করে ডেটা ফিল্টার করা

MongoDB-এ একটি ডকুমেন্টের ভেতরের সাবডকুমেন্ট অ্যারে (subdocument array) থেকে নির্দিষ্ট প্যাটার্ন মэтচ করে ডেটা বের করতে $unwind, $match (with $regex), এবং $group স্টেজ ব্যবহার করা হয়।

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

> db.demo556.insertOne({
    _id: 101,
    details: [
      { id: "234336", Name: "Chris" },
      { id: "123456", Name: "Bob" },
      { id: "234987", Name: "Carol" },
      { id: "989768", Name: "David" },
      { id: "234888", Name: "Sam" },
      { id: "847656", Name: "John" }
    ]
});
{ "acknowledged" : true, "insertedId" : 101 }

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

> db.demo556.find();

আউটপুট:

{ "_id" : 101, "details" : [
    { "id" : "234336", "Name" : "Chris" },
    { "id" : "123456", "Name" : "Bob" },
    { "id" : "234987", "Name" : "Carol" },
    { "id" : "989768", "Name" : "David" },
    { "id" : "234888", "Name" : "Sam" },
    { "id" : "847656", "Name" : "John" }
] }

Aggregation কোয়েরি: id "234" দিয়ে শুরু হওয়া সাবডকুমেন্ট বের করা

> db.demo556.aggregate([
    { $match: { "_id": 101 } },
    { $unwind: "$details" },
    { $match: { "details.id": { $regex: /^234/ } } },
    { $group: {
        _id: "$_id",
        "Detail": { $push: "$details" }
    } }
]).pretty();

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

  1. $match: { "_id": 101 } — শুধু _id: 101 वाला ডকুমেন্ট সিলেক্ট করে।
  2. $unwind: "$details" — details অ্যারেতে থাকা প্রতিটি সাবডকুমেন্টকে আলাদা ডকুমেন্ট হিসেবে ফ্ল্যাটেন (flatten) করে।
  3. $match: { "details.id": { $regex: /^234/ } } — details.id ফিল্ড "234" দিয়ে শুরু হয় কিনা চেক করে (Regex ^234)।
  4. $group — আবার _id অনুযায়ী গ্রুপ করে ফিল্টার করা সাবডকুমেন্টগুলো Detail অ্যারেতে পুশ করে।

আউটপুট

{
    "_id" : 101,
    "Detail" : [
        { "id" : "234336", "Name" : "Chris" },
        { "id" : "234987", "Name" : "Carol" },
        { "id" : "234888", "Name" : "Sam" }
    ]
}

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

  • $unwind অ্যারে ডিকনস্ট্রাক্ট (deconstruct) করতে ব্যবহৃত হয়।
  • $regex প্যাটার্ন ম্যাচিংয়ের জন্য ব্যবহার করা হয় (এখানে ^234 মানে "234" দিয়ে শুরু)۔
  • পারফরম্যান্সের জন্য প্রথমে $match দিয়ে ডকুমেন্ট ফিল্টার করা ভালো প্র্যাকটিস।
  • বড় ডেটাসেটে $unwind পারফরম্যান্স প্রভাবিত করতে পারে, إندেক্স (index) ব্যবহার করুন।
  1. MongoDB-তে অ্যারে থেকে এলিমেন্ট ডিলিট করা

  2. MongoDB-এ অ্যারেতে এলিমেন্ট পুশ করার পদ্ধতি

  3. MongoDB-এ সাব-ডকুমেন্ট রিমুভ করা

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