MongoDB এগ্রিগেশনে $zip, $map, $objectToArray ব্যবহার করে অ্যারে ট্রান্সপোজ করা
MongoDB-এ দুটি সমান্তরাল অ্যারে (Parallel Arrays) - যেন Score1 এবং Score2 - কে জিপ (Zip) করে একটি অবজেক্টের অ্যারে বানাতে $zip, $map, $objectToArray, $arrayToObject অপারেটরগুলো কম্বাইন করে ব্যবহার করা হয়।
১. কালেকশন ও নমুনা ডেটা তৈরি
> db.demo339.insertOne({Id:101, Score1:["98","56"], Score2:[67,89]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e529ee5f8647eb59e5620a2") }
২. ডকুমেন্ট দেখানো
> db.demo339.find();
আউটপুট:
{ "_id" : ObjectId("5e529ee5f8647eb59e5620a2"), "Id" : 101, "Score1" : [ "98", "56" ], "Score2" : [ 67, 89 ] }
৩. জটিল এগ্রিগেশন কোয়েরি দিয়ে জিপ করা
> db.demo339.aggregate([
{ "$project": {
"AllArrayObject": {
"$map": {
"input": {
"$objectToArray": {
"$arrayToObject": {
"$zip": {
"inputs": [ "$Score1", "$Score2" ]
}
}
}
},
"as": "el",
"in": { "Score1": "$$el.k", "Score2": "$$el.v" }
}
}
}}
])
প্রক্রিয়া ব্যাখ্যা:
$zip: {inputs: ["$Score1", "$Score2"]}- দুটি অ্যারে জিপ করে[["98", 67], ["56", 89]]বানায়।$arrayToObject- এটিকে অবজেক্ট বানায়:{"98": 67, "56": 89}।$objectToArray- আবার কি-ভ্যালু পেয়ারের অ্যারে বানায়:[{k:"98", v:67}, {k:"56", v:89}]।$map- প্রতিটি কি-ভ্যালু পেয়ারকে{Score1: k, Score2: v}ফরম্যাটে রূপান্তর করে।
৪. ফলাফল
{ "_id" : ObjectId("5e529ee5f8647eb59e5620a2"), "AllArrayObject" : [ { "Score1" : "98", "Score2" : 67 }, { "Score1" : "56", "Score2" : 89 } ] }
দুটি সমান্তরাল অ্যারে এখন একটি স্ট্রাকচার্ড অবজেক্ট অ্যারে-তে রূপান্তরিত হয়েছে।