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

MongoDB-এ $addFields পাইপলাইন এবং $filter অপারেটর ব্যবহার

MongoDB-এ $addFields পাইপলাইন স্টেজে $filter অপারেটর ব্যবহার করে অ্যারে ফিল্ডকে ফিল্টার করা এবং নতুন ফিল্ড হিসেবে যোগ করা যায়। এটি ডকুমেন্ট স্ট্রাকচার বদলে দিয়ে ফিল্টারড ডেটা রাখে।

কলেকশন এবং ডকুমেন্ট তৈরি

> db.demo118.insertOne({
...   "Id" : "101",
...   "Name" : "Chris",
...   "Subjects" : [ "MySQL", "MongoDB", "Java" ],
...   "Details" : [
...     { "Name" : "David", "S": "MongoDB" },
...     { "Name" : "Bob", "S": "Python" }
...   ]
... });
{ "acknowledged" : true, "insertedId" : ObjectId("5e2f0c0cd8f64a552dae6364") }

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

> db.demo118.find();

আউটপুট:

{ "_id" : ObjectId("5e2f0c0cd8f64a552dae6364"), "Id" : "101", "Name" : "Chris", "Subjects" : [ "MySQL", "MongoDB", "Java" ], "Details" : [ { "Name" : "David", "S" : "MongoDB" }, { "Name" : "Bob", "S" : "Python" } ] }

$addFields এবং $filter ব্যবহার করে কোয়ারী

Details অ্যারেটে S ফিল্ডের মান Subjects অ্যারেতে আছে কিনা চেক করে ফিল্টার করা হয়েছে:

> db.demo118.aggregate([
...   {
...     "$addFields": {
...       "Details": {
...         "$filter": {
...           "input": "$Details",
...           "as": "out",
...           "cond": { "$in": [ "$$out.S", "$Subjects" ] }
...         }
...       }
...     }
...   }
... ]).pretty();

ফলাফল

{ "_id" : ObjectId("5e2f0c0cd8f64a552dae6364"), "Id" : "101", "Name" : "Chris", "Subjects" : [ "MySQL", "MongoDB", "Java" ], "Details" : [ { "Name" : "David", "S" : "MongoDB" } ] }

ব্যাখ্যা:

  • $addFields - নতুন ফিল্ড যোগ করে বা এক্সিস্টিং ফিল্ড ওভাররাইট করে (এখানে Details ওভাররাইট)
  • $filter - input: "$Details" অ্যারেটে প্রতিটি এলিমেন্ট ($$out) চেক করে
  • $in: ["$$out.S", "$Subjects"] - এলিমেন্টের S ফিল্ড Subjects অ্যারেতে আছে কিনা চেক করে
  • শুধু David-এর S="MongoDB" Subjects-এ আছে, Bob-এর S="Python" নেই → David মাত্র রাখা হয়েছে

$filter সিনট্যাক্স:

{ $filter: { input: , as: , cond:  } }

বিকল্প: $project ব্যবহার করলে:

db.demo118.aggregate([
  { $project: {
    Id: 1, Name: 1, Subjects: 1,
    Details: { $filter: { input: "$Details", as: "out", cond: { $in: ["$$out.S", "$Subjects"] } } }
  }}
])

$project শুধু নির্দিষ্ট ফিল্ড রাখে, $addFields সব ফিল্ড রেখে নতুন ফিল্ড যোগ/ওভাররাইট করে।

ব্যবহার ক্ষেত্র: লুকআপ (join) এর পর রেজাল্ট ফিল্টারিং, সাব-ডকুমেন্ট ক্লিনআপ, কন্ডিশনাল অ্যারে প্রসেসিং।

  1. MongoDB-এ অ্যারে সাব-ডকুমেন্ট আপডেট: $set ও পজিশনাল $ অপারেটর

  2. MongoDB অগরিগেশনে ম্যাক্স ভ্যালু সহ অ্যারে এলিমেন্ট ম্যাচ এবং গ্রুপ করা

  3. MongoDB-এ অ্যারে আইটেম গ্রুপ করে একই প্রাইসের প্রোডাক্ট কাউন্ট করা

  4. MongoDB-তে ন্যাচারেল অর্ডার দিয়ে সর্ট করা এবং আইটেমগুলো রিভার্স করা