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

MongoDB-এ তারিখ অনুযায়ী গ্রুপ বাই (Group by) করা


Aggregation Pipeline ব্যবহার করে ডেট বেসড গ্রুপিং

MongoDB-এ তারিখ অনুযায়ী ডেটা গ্রুপ করার জন্য Aggregation Framework-এর $group স্টেজ ব্যবহার করা হয়। নিচে ধাপে ধাপে উদাহরণ দেওয়া হলো।

নমুনা ডেটা তৈরি

> db.groupByDateDemo.insertOne({"UserLoginDateTime": new ISODate()});
{ "acknowledged" : true, "insertedId" : ObjectId("5c6ee4df6fd07954a4890695") }
> db.groupByDateDemo.insertOne({"UserLoginDateTime": new ISODate("2019-01-31 15:20:09.234Z")});
{ "acknowledged" : true, "insertedId" : ObjectId("5c6ee51c6fd07954a4890696") }
> db.groupByDateDemo.insertOne({"UserLoginDateTime": new ISODate("2017-04-21 16:12:13.240Z")});
{ "acknowledged" : true, "insertedId" : ObjectId("5c6ee5336fd07954a4890697") }
> db.groupByDateDemo.insertOne({"UserLoginDateTime": new ISODate("2016-05-25 19:11:21.130Z")});
{ "acknowledged" : true, "insertedId" : ObjectId("5c6ee54b6fd07954a4890698") }
> db.groupByDateDemo.insertOne({"UserLoginDateTime": new ISODate("2016-05-25 19:11:21.130Z")});
{ "acknowledged" : true, "insertedId" : ObjectId("5c6ee8de6fd07954a4890699") }
> db.groupByDateDemo.insertOne({"UserLoginDateTime": new ISODate()});
{ "acknowledged" : true, "insertedId" : ObjectId("5c6ee8e76fd07954a489069a") }

ডেটা যাচাই:

> db.groupByDateDemo.find().pretty();

গ্রুপ বাই কোয়েরি

ইয়ার এবং ডে অফ ইয়ার কম্বাইন করে ইউনিক ডেট তৈরি করা হয়েছে:

> db.groupByDateDemo.aggregate([
  {
    $group: {
      _id: {
        $add: [
          { $dayOfYear: "$UserLoginDateTime" },
          { $multiply: [400, { $year: "$UserLoginDateTime" }] }
        ]
      },
      NumberOfTimes: { $sum: 1 },
      f: { $min: "$UserLoginDateTime" }
    }
  },
  { $sort: { _id: 1 } },
  { $limit: 10 },
  { $project: { date: "$f", NumberOfTimes: 1, _id: 0 } }
]);

ফলাফল:

{
  "NumberOfTimes" : 2,
  "date" : ISODate("2016-05-25T19:11:21.130Z")
}
{
  "NumberOfTimes" : 1,
  "date" : ISODate("2017-04-21T16:12:13.240Z")
}
{
  "NumberOfTimes" : 1,
  "date" : ISODate("2019-01-31T15:20:09.234Z")
}
{
  "NumberOfTimes" : 2,
  "date" : ISODate("2019-02-21T17:50:23.076Z")
}

ব্যাখ্যা: একই তারিখের একাধিক লগইন এন্ট্রি থাকলে সেগুলো একসাথে গ্রুপ হয়েছে এবং প্রতিটি তারিখের জন্য মোট কাউন্ট দেখানো হয়েছে।


  1. MongoDB-এ _id দিয়ে গ্রুপ করে ডকুমেন্ট কাউন্ট করা

  2. MongoDB-এ দুটি তারিখের মাঝপথে ডেটা সার্চ করা

  3. MongoDB-এ তারিখ অনুযায়ী গ্রুপ করে নামের তালিকা বের করা

  4. MongoDB এগ্রিগেশন: একাধিক ফিল্ড গ্রুপ বাই করে ফলাফল বের করা ($facet)