MongoDB-এ ডেটা সমষ্টি (aggregation) করার জন্য aggregate() মেথডটি ব্যবহার করা হয়। এটি একটি কালেকশনের ডেটার ওপর গাণিতিক হিসাব নিকাশ করে সমষ্টি মান প্রদান করে।
উদাহরণ: কালেকশন তৈরি এবং ডেটা ইনসার্ট
প্রথমে demo544 নামক একটি কালেকশন তৈরি করে কিছু নমুনা ডকুমেন্ট ইনসার্ট করা যাক:
> db.demo544.insertOne({"DueTime":new ISODate("2020-01-10 12:10:20"),Amount:100});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8e1f029e5f92834d7f05ce") }
> db.demo544.insertOne({"DueTime":new ISODate("2020-01-12 12:00:00"),Amount:500});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8e1f089e5f92834d7f05cf") }
> db.demo544.insertOne({"DueTime":new ISODate("2020-01-12 12:10:20"),Amount:900});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8e1f109e5f92834d7f05d0") }
সব ডকুমেন্ট দেখানো
find() মেথড ব্যবহার করে কালেকশনের সব ডকুমেন্ট দেখানো যাক:
> db.demo544.find();
আউটপুট:
{ "_id" : ObjectId("5e8e1f029e5f92834d7f05ce"), "DueTime" : ISODate("2020-01-10T12:10:20Z"), "Amount" : 100 }
{ "_id" : ObjectId("5e8e1f089e5f92834d7f05cf"), "DueTime" : ISODate("2020-01-12T12:00:00Z"), "Amount" : 500 }
{ "_id" : ObjectId("5e8e1f109e5f92834d7f05d0"), "DueTime" : ISODate("2020-01-12T12:10:20Z"), "Amount" : 900 }
ঘন্টার ভিত্তিতে গ্রুপ করে গড় (Average) বের করা
নিচের কোয়েরি ব্যবহার করে DueTime ফিল্ড থেকে ঘন্টা বের করে গ্রুপ করা এবং Amount ফিল্ডের গড় মান বের করা হয়েছে:
> db.demo544.aggregate( { "$group": { "_id": { "$hour": "$DueTime" }, "Amount": { "$avg": "$Amount" } } } )
নোট: অরিজিনাল কোডে $dueTime (ছোট হাতের d) লেখা ছিল, কিন্তু ফিল্ডের নাম DueTime (বড় হাতের D)। MongoDB কেস-সংবেদনশীল (case-sensitive), তাই সঠিক ফিল্ড নাম ব্যবহার করা জরুরি।
এই কোয়েরির আউটপুট:
{ "_id" : 12, "Amount" : 500 }
এখানে _id: 12 মানে ১২টা ঘন্টা (দুপুর ১২টা), এবং Amount: 500 মানে এই ঘন্টার তিনটি ডকুমেন্টের গড় মান ৫০০।
মূল পয়েন্টসমূহ
$groupস্টেজ ডকুমেন্টগুলো গ্রুপ করতে ব্যবহৃত হয়।$hourঅপারেটর একটি ডেট অবজেক্ট থেকে ঘন্টা (০-২৩) বের করে।$avgঅপারেটর গড় মান গণনা করে।- ফিল্ডের নাম লিখতে সময় কেস (uppercase/lowercase) ঠিক রাখতে হবে।