MongoDB এগ্রিগেশনে $project, $cond, $size, $isArray ব্যবহার করে অ্যারে-র এলিমেন্ট কাউন্ট করা
MongoDB-এ একটি ডকুমেন্টের ভেতরে অ্যারে ফিল্ড থাকলে, প্রতিটি ডকুমেন্টের জন্য সেই অ্যারে-তে কতটি এলিমেন্ট (সাব-ডকুমেন্ট) আছে তা গণনা করতে এগ্রিগেশন পাইপলাইন ব্যবহার করা হয়।
১. কালেকশন ও ভিন্ন আকারের অ্যারে ডেটা তৈরি
> db.demo332.insertOne({details:[{Name:"Chris",Age:21}]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e521f16f8647eb59e56208e") }
> db.demo332.insertOne({details:[{Name:"David",Age:23},{Name:"Bob",Age:22}]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e521f21f8647eb59e56208f") }
২. সব ডকুমেন্ট দেখানো
> db.demo332.find();
আউটপুট:
{ "_id" : ObjectId("5e521f16f8647eb59e56208e"), "details" : [ { "Name" : "Chris", "Age" : 21 } ] }
{ "_id" : ObjectId("5e521f21f8647eb59e56208f"), "details" : [ { "Name" : "David", "Age" : 23 }, { "Name" : "Bob", "Age" : 22 } ] }
৩. এগ্রিগেশন কোয়েরি: প্রতিটি ডকুমেন্টের details অ্যারে-র সাইজ গণনা
> db.demo332.aggregate([
{ $project: {
numberOfDocuments: { $cond: {
if: { $isArray: "$details" },
then: { $size: "$details" },
else: "No Documents"
}}
}}
])
ব্যাখ্যা:
$isArray: "$details"- details ফিল্ডটি অ্যারে কিনা চেক করে।$size: "$details"- অ্যারে-র এলিমেন্ট সংখ্যা রিটার্ন করে।$cond- If-Then-Else লজিক: অ্যারে হলে সাইজ, নাহলে "No Documents"।
৪. ফলাফল
{ "_id" : ObjectId("5e521f16f8647eb59e56208e"), "numberOfDocuments" : 1 }
{ "_id" : ObjectId("5e521f21f8647eb59e56208f"), "numberOfDocuments" : 2 }
প্রথম ডকুমেন্টে ১টি, দ্বিতীয় ডকুমেন্টে ২টি সাব-ডকুমেন্ট আছে। এটি রিয়েল-টাইম অ্যানালিটিক্স বা রিপোর্টিং-এ খুব কাজে লাগে।