MongoDB-এ দুই তারিখের মাঝপথে একটি ফিল্ডের মান যোগ (sum) এবং রেকর্ড সংখ্যা (count) জানতে অ্যাগ্রিগেশন পাইপলাইনে $match, $gte, $lte এবং $group স্টেজ ব্যবহার করা হয়।
নমুনা কালেকশন তৈরি
> db.countandsumdemo.insertOne({ "Value": 10, "created_at": ISODate('2019-10-11') });
{ "acknowledged": true, "insertedId": ObjectId("5e038e6df5e889d7a51994fa") }
> db.countandsumdemo.insertOne({ "Value": 50, "created_at": ISODate('2019-01-31') });
{ "acknowledged": true, "insertedId": ObjectId("5e038e77f5e889d7a51994fb") }
> db.countandsumdemo.insertOne({ "Value": 100, "created_at": ISODate('2019-06-31') });
{ "acknowledged": true, "insertedId": ObjectId("5e038e8af5e889d7a51994fc") }
নোট: ২০১৯-০৬-৩১ অবৈধ তারিখ, MongoDB এটি ২০১৯-০৭-০১-এ কনভার্ট করে দিয়েছে।
সমস্ত ডকুমেন্ট প্রদর্শন
> db.countandsumdemo.find().pretty();
আউটপুট:
{ "_id": ObjectId("5e038e6df5e889d7a51994fa"), "Value": 10, "created_at": ISODate("2019-10-11T00:00:00Z") }
{ "_id": ObjectId("5e038e77f5e889d7a51994fb"), "Value": 50, "created_at": ISODate("2019-01-31T00:00:00Z") }
{ "_id": ObjectId("5e038e8af5e889d7a51994fc"), "Value": 100, "created_at": ISODate("2019-07-01T00:00:00Z") }
দুই তারিখের মাঝপথে কাউন্ট এবং সাম
২০১৯-০৫-০১ থেকে ২০১৯-১২-৩১ পর্যন্ত:
> db.countandsumdemo.aggregate([
{
$match: {
created_at: {
$gte: new Date('2019-05-01'),
$lte: new Date('2019-12-31')
}
}
},
{
$group: {
_id: null,
SUM: { $sum: "$Value" },
COUNT: { $sum: 1 }
}
}
]);
ফলাফল
{ "_id": null, "SUM": 110, "COUNT": 2 }
ব্যাখ্যা:
$match- ২০১৯-০৫-০১ থেকে ২০১৯-১২-৩১ পর্যন্ত তারিখের ডকুমেন্ট ফিল্টার করে (Value: 10 এবং 100)।$group-_id: nullদিয়ে সব গ্রুপে একসাথে,$sum: "$Value"দিয়ে Value ফিল্ডের যোগফল (১১০),$sum: 1দিয়ে রেকর্ড সংখ্যা (২) বের করে।
টিপস
created_at ফিল্ডে ইন্ডেক্স থাকলে কোয়েরি দ্রুত হবে। ডেট রেঞ্জ কোয়েরির জন্য কম্পাউন্ড ইন্ডেক্স ব্যবহার করুন।