MongoDB অগ্রেশন পাইপলাইনে ইন্টিজার অ্যারেকে স্ট্রিংয়ে কনক্যাটেনেট করা
MongoDB-এ ইন্টিজার অ্যারেকে স্ট্রিং হিসেবে একসাথে জোড়া (concatenate) করার জন্য অগ্রেশন পাইপলাইনে $reduce, $concat, $toLower (নাম্বারকে স্ট্রিং করতে), $substrCP ব্যবহার করা হয়।
উদাহরণ: আইডি লিস্ট সহ ডকুমেন্ট তৈরি
> db.demo377.insertOne({"ListOfIds":[1001,1002,1003,1004,1005,1006,1007]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e5a73462ae06a1609a00b0e") }
ডকুমেন্ট দেখানো
> db.demo377.find().pretty();
{ "_id" : ObjectId("5e5a73462ae06a1609a00b0e"), "ListOfIds" : [ 1001, 1002, 1003, 1004, 1005, 1006, 1007 ] }
অগ্রেশন কুয়েরি: "++" সেপারেটর দিয়ে কনক্যাটেনেট
> db.demo377.aggregate([
{ "$project": {
"ListOfIds": {
"$let": {
"vars": {
"key": {
"$reduce": {
"input": "$ListOfIds",
"initialValue": "",
"in": { "$concat": ["$$value", "++", { "$toLower": "$$this" }] }
}
}
},
"in": { "$substrCP": ["$$key", 2, { "$strLenCP": "$$key" }] }
}
}
}}
])
ফলাফল
{ "_id" : ObjectId("5e5a73462ae06a1609a00b0e"), "ListOfIds" : "1001++1002++1003++1004++1005++1006++1007" }
পাইপলাইন ব্যাখ্যা
$reduce: অ্যারে আইটারেট করে একক মান বানায়।initialValue: ""খালি স্ট্রিং।{ "$concat": ["$$value", "++", { "$toLower": "$$this" }] }: প্রতিটি নাম্বারকে$toLowerদিয়ে স্ট্রিং বানায় (MongoDB-এ নাম্বারকে স্ট্রিং করার ট্রিক), তারপর "++" দিয়ে কনক্যাটেনেট।$let: ভেরিয়েবলkeyএ পুরো স্ট্রিং স্টোর (শুরুতে "++1001++1002...")।$substrCP: প্রথম ২ ক্যারেক্টার ("++") কাটিয়ে ফেলা:[$$key, 2, { $strLenCP: "$$key" }]।
সরল বিকল্প (MongoDB 4.4+)
db.demo377.aggregate([
{ $project: { ListOfIds: { $reduce: { input: "$ListOfIds", initialValue: "", in: { $concat: ["$$value", { $cond: [{ $eq: ["$$value", ""]}, "", "++"] }, { $toString: "$$this" }] } } } } }
])
$toString (MongoDB 4.0+) সরাসরি নাম্বারকে স্ট্রিং করে, $toLower ট্রিক প্রয়োজন নেই।