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

MongoDB-এ এগ্রিগেশন ব্যবহার করে কোয়েরি-তে ম্যাচ করা কী (Key) লিস্টে যোগ করা


MongoDB-এ $addFields এবং $filter ব্যবহার করে শর্ত পূরণকারী সাব-ডকুমেন্টগুলো রেখে বাকি বাদ দেওয়া

MongoDB-এ একটি ডকুমেন্টের ভেতরের অ্যারে থেকে নির্দিষ্ট শর্ত (যেমন Score >= 70) পূরণকারী এলিমেন্টগুলো মাত্র রেখে বাকি বাদ দিতে এগ্রিগেশন পাইপলাইনে $addFields এবং $filter ব্যবহার করা হয়।

১. কালেকশন ও নেস্টেড ডেটা তৈরি

> db.demo334.insertOne({
  "Name": "Chris",
  "Age": 21,
  "details": [
    { "Subject": "MySQL", "Score": 78 },
    { "Subject": "MongoDB", "Score": 45 }
  ]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e52241bf8647eb59e562090") }

২. ডকুমেন্ট দেখানো

> db.demo334.find().pretty();

আউটপুট:

{
  "_id" : ObjectId("5e52241bf8647eb59e562090"),
  "Name" : "Chris",
  "Age" : 21,
  "details" : [
    { "Subject" : "MySQL", "Score" : 78 },
    { "Subject" : "MongoDB", "Score" : 45 }
  ]
}

৩. এগ্রিগেশন কোয়েরি: Score >= 70 থাকা ডিটেইলস মাত্র রাখা

> db.demo334.aggregate([
  { $addFields: {
      details: { $filter: {
        input: '$details',
        as: 'out',
        cond: { $gte: ['$$out.Score', 70] }
      }}
  }}
])

ব্যাখ্যা:

  • $addFields - নতুন ফিল্ড যোগ করে বা বিদ্যমান ফিল্ড আপডেট করে।
  • $filter - input: '$details' অ্যারে-র প্রতিটি এলিমেন্ট ($$out) চেক করে।
  • cond: {$gte: ['$$out.Score', 70]} - Score ৭০ বা তার বেশি হলে রাখে।

৪. ফলাফল

{ "_id" : ObjectId("5e52241bf8647eb59e562090"), "Name" : "Chris", "Age" : 21, "details" : [ { "Subject" : "MySQL", "Score" : 78 } ] }

MongoDB-এর ৪৫ নম্বর বাদ পড়েছে, শুধু MySQL (৭৮ নম্বর) বাকি থাকেছে। মূল ডকুমেন্ট ডাটাবেসে পরিবর্তিত হয়নি, শুধু আউটপুটে ফিল্টার হয়েছে।


  1. MongoDB-এ টাইমস্ট্যাম্প শুধু অনুপস্থিত থাকলে যোগ করা

  2. MongoDB-তে লিস্ট থেকে মান (অবজেক্ট নয়) কুয়েরি করা

  3. MongoDB-এ নির্দিষ্ট ফিল্ডের সব ডকুমেন্টের মান যোগ করা (aggregate $sum)

  4. MongoDB-তে লিস্ট সর্ট করে পজিশন (র‍্যাঙ্ক) যোগ করা