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

MongoDB অ্যাগ্রিগেশন: অ্যারেতে নেস্টেড অ্যারে স্লাইস (Slice) করা

MongoDB-এ অ্যারেতে নেস্টেড অ্যারে (array inside array) স্লাইস করতে অ্যাগ্রিগেশন পাইপলাইনে $addFields, $map, এবং $slice অপারেটর একসাথে ব্যবহার করা হয়।

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

> db.demo111.insertOne({
...   "_id" : 101,
...   "Name" : "Chris",
...   "Details" : [
...     {
...       "_id" : 101,
...       "Score" : 78,
...       "Subjects" : [
...         { "_id" : "10001", "SubjectName" : "MySQL" },
...         { "_id" : "10003", "SubjectName" : "MongoDB" }
...       ]
...     },
...     {
...       "_id" : 102,
...       "Score" : 87,
...       "Subjects" : [
...         { "_id" : "10004", "SubjectName" : "Java" }
...       ]
...     }
...   ]
... });
{ "acknowledged" : true, "insertedId" : 101 }

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

> db.demo111.find();

আউটপুট:

{ "_id" : 101, "Name" : "Chris", "Details" : [ { "_id" : 101, "Score" : 78, "Subjects" : [ { "_id" : "10001", "SubjectName" : "MySQL" }, { "_id" : "10003", "SubjectName" : "MongoDB" } ] }, { "_id" : 102, "Score" : 87, "Subjects" : [ { "_id" : "10004", "SubjectName" : "Java" } ] } ] }

অ্যারে স্লাইস করার কোয়ারী

$map দিয়ে Details অ্যারের প্রতিটি এলিমেন্ট প্রসেস করে, $slice: ["$$out.Subjects", 1] দিয়ে Subjects অ্যারের প্রথম ১টি এলিমেন্ট রাখা হয়েছে:

> db.demo111.aggregate([
...   { "$addFields": {
...     "Details": {
...       "$map": {
...         "input": "$Details",
...         "as": "out",
...         "in": {
...           "_id": "$$out._id",
...           "Score": "$$out.Score",
...           "Subjects": { "$slice": [ "$$out.Subjects", 1 ] }
...         }
...       }
...     }
...   }}
... ]);

ফলাফল

{ "_id" : 101, "Name" : "Chris", "Details" : [ { "_id" : 101, "Score" : 78, "Subjects" : [ { "_id" : "10001", "SubjectName" : "MySQL" } ] }, { "_id" : 102, "Score" : 87, "Subjects" : [ { "_id" : "10004", "SubjectName" : "Java" } ] } ] }

ব্যাখ্যা:

  • প্রথম Details এলিমেন্ট: Subjects ছিল ২টি (MySQL, MongoDB) → স্লাইস করে ১টি (MySQL)
  • দ্বিতীয় Details এলিমেন্ট: Subjects ছিল ১টি (Java) → স্লাইস করে ১টি (Java)
  • $slice: [array, n] - প্রথম n এলিমেন্ট রাখে। n নেতিবাচক হলে শেষ থেকে n টি (যেমন -1 = শেষ ১টি)

$slice ভেরিয়েশন:

  • {$slice: ["$array", 2]} - প্রথম ২ এলিমেন্ট
  • {$slice: ["$array", -2]} - শেষ ২ এলিমেন্ট
  • {$slice: ["$array", 1, 3]} - ১ নম্বর إندেক্স থেকে ৩ এলিমেন্ট (skip 1, limit 3)

ব্যবহার ক্ষেত্র: পেজিনেশন (pagination), টপ-এন কোয়ারী, প্রিভিউ জেনারেশন, রেসপন্স সাইজ লিমিট।

  1. জাভাস্ক্রিপ্ট Array.slice() মেথড

  2. MongoDB-তে $slice ব্যবহার করে অ্যারে থেকে একমাত্র এলিমেন্ট বের করা

  3. MongoDB-তে অ্যাগ্রিগেশন দিয়ে অ্যারে এলিমেন্টের গড় (Average) বের করা ($avg)

  4. MongoDB অ্যাগ্রিগেশন: অ্যারে এলিমেন্টের সাবসেট যোগ করা ($first + $sum + $subtract)