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

MongoDB-এ তারিখ অনুযায়ী সর্ট করে ইউজার অনুযায়ী গ্রুপ করা

MongoDB Aggregation-এ সর্ট এবং গ্রুপ একসাথে

একটি কোয়েরিতে ডেটা তারিখ অনুযায়ী সর্ট করে তারপর ইউজার অনুযায়ী গ্রুপ করার জন্য Aggregation Pipeline ব্যবহার করা হয়। এখানে প্রতিটি ইউজারের সর্বোচ্চ (latest) তারিখ বের করা হয়েছে।

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

> db.demo243.insertOne({"userId":1, dueDate: new ISODate("2019-01-10")});
> db.demo243.insertOne({"userId":2, dueDate: new ISODate("2019-11-10")});
> db.demo243.insertOne({"userId":2, dueDate: new ISODate("2020-01-31")});
> db.demo243.insertOne({"userId":1, dueDate: new ISODate("2010-01-10")});

সকল ডকুমেন্ট দেখানো

> db.demo243.find();

আউটপুট:

{ "_id" : ObjectId(...), "userId" : 1, "dueDate" : ISODate("2019-01-10") }
{ "_id" : ObjectId(...), "userId" : 2, "dueDate" : ISODate("2019-11-10") }
{ "_id" : ObjectId(...), "userId" : 2, "dueDate" : ISODate("2020-01-31") }
{ "_id" : ObjectId(...), "userId" : 1, "dueDate" : ISODate("2010-01-10") }

Aggregation Query

> db.demo243.aggregate([
    { $sort: { dueDate: -1 } },
    { $group: { _id: "$userId", dueDate: { $max: "$dueDate" } } }
]);

আউটপুট:

{ "_id" : 2, "dueDate" : ISODate("2020-01-31") }
{ "_id" : 1, "dueDate" : ISODate("2019-01-10") }

ব্যাখ্যা

  1. $sort: { dueDate: -1 } — ডেটা অবরোহ ক্রমে (সর্বশেষ তারিখ প্রথমে) সর্ট করে
  2. $group: userId অনুযায়ী গ্রুপ করে, $max দিয়ে সর্বোচ্চ তারিখ বের করে

মডার্ন বিকল্প: $first সাথে সর্ট

MongoDB 4.0+ এ আরও দক্ষ পদ্ধতি:

> db.demo243.aggregate([
    { $sort: { userId: 1, dueDate: -1 } },
    { $group: { _id: "$userId", latestDueDate: { $first: "$dueDate" } } }
]);

এটি $max-এর চেয়ে ফাস্ট কারণ সর্টেড ডেটা থেকে প্রথম মানই নেয়।

অতিরিক্ত ফিল্ড রাখতে চাইলে

> db.demo243.aggregate([
    { $sort: { dueDate: -1 } },
    { $group: { 
        _id: "$userId", 
        latestDueDate: { $max: "$dueDate" },
        count: { $sum: 1 },
        allDates: { $push: "$dueDate" }
    }}
]);
  1. MongoDB-তে ডুপ্লিকেট ডকুমেন্ট গ্রুপ করা

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

  3. MongoDB-তে অ্যাগ্রিগেশন দিয়ে ডISTINCT সিলেক্ট এবং কাউন্ট করা

  4. MySQL- গ্রুপ এবং COUNT দিয়ে তারিখ অনুযায়ী ডেটা বরাদ্দ করা