MongoDB Aggregate Pipeline-এ তারিখ (Date) দিয়ে গ্রুপ করে ফ্রিকোয়েন্সি কাউন্ট
ISODate ফিল্ড থাকলে একই তারিখের ডকুমেন্টগুলো গ্রুপ করে কতবার আছে তা বের করতে $group স্টেজে $dayOfYear, $year বা $dateToString ব্যবহার করা হয়। উদাহরণে কম্পোজিট কী (_id) তৈরি করে গ্রুপ করা হয়েছে।
উদাহরণ: ডেটা ইনসার্ট (ISODate)
> db.demo160.insertOne({"DueDate":new ISODate()});
{ "acknowledged" : true, "insertedId" : ObjectId("5e357525fdf09dd6d0853a04") }
> db.demo160.insertOne({"DueDate":new ISODate("2019-01-11")});
{ "acknowledged" : true, "insertedId" : ObjectId("5e357532fdf09dd6d0853a05") }
> db.demo160.insertOne({"DueDate":new ISODate()});
{ "acknowledged" : true, "insertedId" : ObjectId("5e357534fdf09dd6d0853a06") }
> db.demo160.insertOne({"DueDate":new ISODate("2019-01-11")});
{ "acknowledged" : true, "insertedId" : ObjectId("5e357538fdf09dd6d0853a07") }
> db.demo160.insertOne({"DueDate":new ISODate("2020-04-10")});
{ "acknowledged" : true, "insertedId" : ObjectId("5e357542fdf09dd6d0853a08") }
সব ডকুমেন্ট দেখানো
> db.demo160.find();
আউটপুট:
{ "_id" : ObjectId("5e357525fdf09dd6d0853a04"), "DueDate" : ISODate("2020-02-01T12:55:01.983Z") }
{ "_id" : ObjectId("5e357532fdf09dd6d0853a05"), "DueDate" : ISODate("2019-01-11T00:00:00Z") }
{ "_id" : ObjectId("5e357534fdf09dd6d0853a06"), "DueDate" : ISODate("2020-02-01T12:55:16.787Z") }
{ "_id" : ObjectId("5e357538fdf09dd6d0853a07"), "DueDate" : ISODate("2019-01-11T00:00:00Z") }
{ "_id" : ObjectId("5e357542fdf09dd6d0853a08"), "DueDate" : ISODate("2020-04-10T00:00:00Z") }
অ্যাগ্রিগেশন: তারিখ অনুযায়ী গ্রুপ ও কাউন্ট
> db.demo160.aggregate([
... { $group: {
... _id: {
... $add: [
... { $dayOfYear: "$DueDate"},
... { $multiply: [400, {$year: "$DueDate"}] }
... ]},
... Frequency: { $sum: 1 },
... d: {$min: "$DueDate"}
... }},
... { $sort: {_id: 1} },
... { $limit: 100},
... { $project: { date: "$d", Frequency: 1, _id: 0} }
... ]);
আউটপুট:
{ "Frequency" : 2, "date" : ISODate("2019-01-11T00:00:00Z") }
{ "Frequency" : 2, "date" : ISODate("2020-02-01T12:55:01.983Z") }
{ "Frequency" : 1, "date" : ISODate("2020-04-10T00:00:00Z") }
ব্যাখ্যা
$group—_idএ কম্পোজিট কী:year*400 + dayOfYear(এই ফর্মুলা বছরের মধ্যে দিন ইউনিক করে)।Frequency: {$sum:1}— প্রতিটি গ্রুপের ডকুমেন্ট কাউন্ট।d: {$min: "$DueDate"}— গ্রুপের প্রতিনিধি তারিখ (ন্যূনতম) রাখা।$project— আউটপুট ফরম্যাট:dateওFrequency।
সरल পদ্ধতি (MongoDB 3.6+): {$dateToString: {format: "%Y-%m-%d", date: "$DueDate"}} দিয়ে স্ট্রিং কী বানানো সহজ ও পঠনীয়।