MongoDB Aggregation-এ $match (with $gte, $lte), $group (with $sum) ব্যবহার করে নির্দিষ্ট তারিখের রেঞ্জ ও নির্দিষ্ট ফিল্ড মান অনুযায়ী ডকুমেন্ট ফিল্টার করে গ্রুপ করা এবং সম (sum) ও কাউন্ট (count) বের করা হয়।
উদাহরণ: কালেকশন ও ডেটা তৈরি
> db.demo560.insertOne({ "value1": 40, "value2": 40, shippingDate: new ISODate("2020-02-26") });
{ "acknowledged" : true, "insertedId" : ObjectId("5e8f3d5254b4472ed3e8e867") }
> db.demo560.insertOne({ "value1": 20, "value2": 60, shippingDate: new ISODate("2020-02-26") });
{ "acknowledged" : true, "insertedId" : ObjectId("5e8f3d5254b4472ed3e8e868") }
> db.demo560.insertOne({ "value1": 40, "value2": 70, shippingDate: new ISODate("2020-03-31") });
{ "acknowledged" : true, "insertedId" : ObjectId("5e8f3d5254b4472ed3e8e869") }
> db.demo560.insertOne({ "value1": 40, "value2": 130, shippingDate: new ISODate("2020-03-31") });
{ "acknowledged" : true, "insertedId" : ObjectId("5e8f3d5254b4472ed3e8e86a") }
সব ডকুমেন্ট দেখানো
> db.demo560.find();
আউটপুট:
{ "_id" : ObjectId("5e8f3d5254b4472ed3e8e867"), "value1" : 40, "value2" : 40, "shippingDate" : ISODate("2020-02-26T00:00:00Z") }
{ "_id" : ObjectId("5e8f3d5254b4472ed3e8e868"), "value1" : 20, "value2" : 60, "shippingDate" : ISODate("2020-02-26T00:00:00Z") }
{ "_id" : ObjectId("5e8f3d5254b4472ed3e8e869"), "value1" : 40, "value2" : 70, "shippingDate" : ISODate("2020-03-31T00:00:00Z") }
{ "_id" : ObjectId("5e8f3d5254b4472ed3e8e86a"), "value1" : 40, "value2" : 130, "shippingDate" : ISODate("2020-03-31T00:00:00Z") }
Aggregation কোয়েরি: value1=40 এবং ২০২০-০২-২৬ থেকে ২০২০-০৩-৩১-এর মাঝপথে
> db.demo560.aggregate([
{
$match: {
"value1": 40,
"shippingDate": {
"$gte": ISODate("2020-02-26"),
"$lte": ISODate("2020-03-31")
}
}
},
{
$group: {
_id: "$shippingDate",
total: { $sum: "$value2" },
count: { $sum: 1 }
}
}
])
কোয়েরির ব্যাখ্যা
$match—value1: 40এবংshippingDate২০২০-০২-২৬ থেকে ২০২০-০৩-৩১-এর মধ্যে ($gte= greater than or equal,$lte= less than or equal)।$group—shippingDateঅনুযায়ী গ্রুপ করে:total: { $sum: "$value2" }—value2ফিল্ডের সমষ্টি (sum)।count: { $sum: 1 }— ডকুমেন্ট সংখ্যা (count)।
আউটপুট
{ "_id" : ISODate("2020-03-31T00:00:00Z"), "total" : 200, "count" : 2 }
{ "_id" : ISODate("2020-02-26T00:00:00Z"), "total" : 40, "count" : 1 }
নোট: ২০২০-০২-২৬-এ value1:40 वाला ১টি ডকুমেন্ট (value2=40), ২০২০-০৩-৩১-এ ২টি ডকুমেন্ট (value2=70+130=200)।
মূল পয়েন্টসমূহ
$matchপাইপলাইনের শুরুতে রাখলে ইন্ডেক্স ব্যবহার হয় (পারফরম্যান্স ভালো)।$gte/$lteডেট রেঞ্জ কুয়েরির জন্য স্ট্যান্ডার্ড।$group-এ_idহিসেবে গ্রুপিং ফিল্ড দিন;$sumদিয়ে সম ও কাউন্ট দুইটোই করা যায়।- আউটপুট সর্ট করতে
{ $sort: { _id: 1 } }স্টেজ যোগ করুন।