কম্পিউটার টিউটোরিয়াল

MongoDB Aggregate-এ $group দিয়ে তারিখ অনুযায়ী ডুপ্লিকেট কাউন্ট করা

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"}} দিয়ে স্ট্রিং কী বানানো সহজ ও পঠনীয়।

  1. MongoDB-এ $unwind ব্যবহার করে কাউন্ট বের করা

  2. MongoDB-তে ডুপ্লিকেট ডকুমেন্ট গ্রুপ করা

  3. MongoDB Aggregation-এ ডুপ্লিকেট নামের কাউন্ট ও সাবজেক্ট লিস্ট বের করা

  4. MongoDB-এ জন্ম তারিখ থেকে বয়স ক্যালকুলেট করা