MongoDB-এ $reduce এবং $concatArrays দিয়ে দুই ডাইমেনশনাল অ্যারে ফ্ল্যাটেন (Flatten) করা
MongoDB-এ একটি ফিল্ডে অ্যারে-অফ-অ্যারে (Multi-dimensional Array) থাকলে, সেগুলো একসাথে মিলিয়ে একটি ফ্ল্যাট অ্যারে বানাতে $reduce এবং $concatArrays ব্যবহার করা হয়।
১. কালেকশন ও মাল্টি-অ্যারে ডেটা তৈরি
> db.demo338.insertOne({"Name":"Chris","Marks1":[ [56,67,45],[67,89,90,91] ]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e5299baf8647eb59e56209f") }
২. ডকুমেন্ট দেখানো
> db.demo338.find().pretty();
আউটপুট:
{
"_id" : ObjectId("5e5299baf8647eb59e56209f"),
"Name" : "Chris",
"Marks1" : [
[ 56, 67, 45 ],
[ 67, 89, 90, 91 ]
]
}
৩. $reduce + $concatArrays দিয়ে ফ্ল্যাটেন করা
> db.demo338.aggregate([
{ "$project": {
"Marks": {
"$reduce": {
"input": "$Marks1",
"initialValue": [],
"in": { "$concatArrays": ["$$this", "$$value"] }
}
}
}}
])
ব্যাখ্যা:
$reduce- অ্যারে-র প্রতিটি এলিমেন্টে (সাব-অ্যারে) লুপ চলে।initialValue: []- শুরুতে খালি অ্যারে।in: {$concatArrays: ["$$this", "$$value"]}- বর্তমান সাব-অ্যারে ($$this) এবং একমুতো ফলাফল ($$value) কনক্যাট করে।
৪. ফলাফল
{ "_id" : ObjectId("5e5299baf8647eb59e56209f"), "Marks" : [ 67, 89, 90, 91, 56, 67, 45 ] }
নোট: অর্ডার হলো $$this আগে, $$value পরে, তাই দ্বিতীয় সাব-অ্যারে ([67,89,90,91]) আগে আসে, তারপর প্রথমটি ([56,67,45])। ক্রম বদলাতে ["$$value", "$$this"] করুন।