MongoDB এগ্রিগেশনে $convert, $reduce, $split ব্যবহার করে ফরম্যাটেড স্ট্রিংকে নম্বরে রূপান্তর
MongoDB-এ কমা (,) সeperator-সহ স্ট্রিং (যেমন "1,533.07" বা "8899,322,135,875.50") কে ডাবল (Double) নম্বরে রূপান্তর করতে এগ্রিগেশন পাইপলাইনে স্ট্রিং ম্যানিপুলেশন এবং টাইপ কনভার্সন কম্বাইন করতে হয়।
১. কালেকশন ও নমুনা ডেটা তৈরি
> db.demo335.insertOne({"Value":"45,67,78.0"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e522a1cf8647eb59e562091") }
> db.demo335.insertOne({"Value":"17664,76,534.0"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e522a26f8647eb59e562092") }
> db.demo335.insertOne({"Value":"8899,322,135,875.50"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e522a34f8647eb59e562093") }
> db.demo335.insertOne({"Value":"1,533.07"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e522ab9f8647eb59e562094") }
২. সব ডকুমেন্ট দেখানো
> db.demo335.find();
আউটপুট:
{ "_id" : ObjectId("5e522a1cf8647eb59e562091"), "Value" : "45,67,78.0" }
{ "_id" : ObjectId("5e522a26f8647eb59e562092"), "Value" : "17664,76,534.0" }
{ "_id" : ObjectId("5e522a34f8647eb59e562093"), "Value" : "8899,322,135,875.50" }
{ "_id" : ObjectId("5e522ab9f8647eb59e562094"), "Value" : "1,533.07" }
৩. জটিল এগ্রিগেশন কোয়েরি: কমা সরিয়ে ডাবল-এ কনভার্ট
db.demo335.aggregate([
{ $project: {
data: {
$convert: {
input: {
$reduce: {
input: { $split: ['$Value', ','] },
initialValue: '',
in: { $concat: ['$$value', '$$this'] }
}
},
to: 'double',
onError: 0
}
}
}}
])
স্টেপ-বাই-স্টেপ ব্যাখ্যা:
$split: ['$Value', ',']- কমা দিয়ে স্ট্রিং স্প্লিট করে অ্যারে বানায়:["45", "67", "78.0"]।$reduce- অ্যারে-র এলিমেন্টগুলো কনক্যাট করে একক স্ট্রিং বানায়:"456778.0"।$convert: {to: 'double', onError: 0}- স্ট্রিংকে ডাবল নম্বরে রূপান্তর। এরর হলে ০ রিটার্ন।
৪. ফলাফল
{ "_id" : ObjectId("5e522a1cf8647eb59e562091"), "data" : 456778 }
{ "_id" : ObjectId("5e522a26f8647eb59e562092"), "data" : 1766476534 }
{ "_id" : ObjectId("5e522a34f8647eb59e562093"), "data" : 8899322135875.5 }
{ "_id" : ObjectId("5e522ab9f8647eb59e562094"), "data" : 1533.07 }
নোট: "45,67,78.0" -> "456778.0" -> 456778 (ডাবল)। এটি লোকালি-স্পেসিফিক ফরম্যাট হ্যান্ডল করার জন্য আরও জটিল লজিক লাগতে পারে (যেমন ইউরোপিয়ান ফরম্যাটে কমা ডেসিমেল সেপারেটর)।