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

MongoDB-এ একাধিক অ্যারে মিলিয়ে এক বড় অ্যারে বানানো

MongoDB-এ একাধিক অ্যারে ফিল্ডকে একসাথে जोড়া (merge) করে একটি বড় অ্যারে বানাতে অ্যাগ্রিগেশন পাইপলাইনে $setUnion, $ifNull, $filter ইত্যাদি ব্যবহার করা হয়।

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

> db.demo119.insertOne({
...   "_id": 101,
...   "WebDetails": [
...     { "ImagePath": "/all/image1", "isCorrect": "false" },
...     { "ImagePath": "/all/image2", "isCorrect": "true" }
...   ],
...   "ClientDetails": [
...     { "Name": "Chris", "isCorrect": "false" },
...     { "Name": "David", "isCorrect": "true" }
...   ]
... });
{ "acknowledged" : true, "insertedId" : 101 }

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

> db.demo119.find();

আউটপুট:

{ "_id" : 101, "WebDetails" : [ { "ImagePath" : "/all/image1", "isCorrect" : "false" }, { "ImagePath" : "/all/image2", "isCorrect" : "true" } ], "ClientDetails" : [ { "Name" : "Chris", "isCorrect" : "false" }, { "Name" : "David", "isCorrect" : "true" } ] }

অ্যারে মёрজ করার কোয়ারী

$setUnion দিয়ে দুটি অ্যারে মёрজ, $ifNull দিয়ে null হ্যান্ডলিং, $filter দিয়ে isCorrect: "false" वालা এলিমেন্ট ফিল্টার:

> db.demo119.aggregate([
...   { "$project": {
...     "AllDetails": {
...       "$filter": {
...         "input": {
...           "$setUnion": [
...             { "$ifNull": [ "$WebDetails", [] ] },
...             { "$ifNull": [ "$ClientDetails", [] ] }
...           ]
...         },
...         "as": "out",
...         "cond": { "$eq": [ "$$out.isCorrect", "false" ] }
...       }
...     }
...   }},
...   { "$match": { "AllDetails.0": { "$exists": true } } }
... ]);

ফলাফল

{ "_id" : 101, "AllDetails" : [ { "ImagePath" : "/all/image1", "isCorrect" : "false" }, { "Name" : "Chris", "isCorrect" : "false" } ] }

স্টেপ বাই স্টেপ ব্যাখ্যা:

  1. $ifNull: ["$WebDetails", []] - WebDetails না থাকলে খালি অ্যারে রিটার্ন (এরর এড়াতে)
  2. $setUnion - দুটি অ্যারে যুনিয়ন করে (ডুপ্লিকেট এলিমেন্ট সরিয়ে)
  3. $filter - মёрজ করা অ্যারেতে isCorrect: "false" শর্তে ফিল্টার
  4. $match: {AllDetails.0: {$exists: true}} - খালি অ্যারে বালানোর জন্য

গুরুত্বপূর্ণ: $setUnion ডুপ্লিকেট এলিমেন্ট (পুরো অবজেক্ট সমান হলে) সরিয়ে দেয়। যদি ডুপ্লিকেট রাখতে চান, $concatArrays ব্যবহার করুন (MongoDB 4.4+):

{ $concatArrays: [ { $ifNull: ["$WebDetails", []] }, { $ifNull: ["$ClientDetails", []] } ] }

নোট: উদাহরণে isCorrect স্ট্রিং ("true"/"false") হিসেবে স্টোর করা হয়েছে, বুলিয়ান নয়। বুলিয়ান ব্যবহার করলে {$eq: ["$$out.isCorrect", false]} লিখতে হতো।

  1. MongoDB কালেকশনে দেশ, রাজ্য ও সিটি অনুযায়ী এগ리게েশন

  2. MongoDB-এ updateOne এবং $push ব্যবহার করে নেস্টেড অ্যারে আপডেট করা

  3. MongoDB-এ অ্যারে বিশিষ্ট এক রেকর্ডকে একাধিক রেকর্ডে রূপান্তর করা (নতুন কালেকশনে)

  4. MongoDB এগ্রিগেশন: একাধিক ফিল্ড গ্রুপ বাই করে ফলাফল বের করা ($facet)