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

MongoDB-এ দুটি তারিখের মাঝপথে ও নির্দিষ্ট ফিল্ড মান দিয়ে ডেটা গ্রুপ করে সম ও কাউন্ট বের করা

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 }
      }
    }
])

কোয়েরির ব্যাখ্যা

  1. $match — value1: 40 এবং shippingDate ২০২০-০২-২৬ থেকে ২০২০-০৩-৩১-এর মধ্যে ($gte = greater than or equal, $lte = less than or equal)।
  2. $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 } } স্টেজ যোগ করুন।
  1. MongoDB-এ নির্দিষ্ট সংখ্যা থেকে বড় ফিল্ড ভ্যালু वाले ডকুমেন্ট ফেচ করা

  2. MySQL-এ DATEDIFF() ব্যবহার করে দিনের পার্থক্য বের করে স্যালারি ক্যালকুলেট করা

  3. MySQL-এ নির্দিষ্ট কলাম মানের ফ্রিকোয়েন্সি (কাউন্ট) বের করা

  4. MySQL-এ দুটি তারিখের মধ্যে থাকা রেকর্ডের যোগফল বের করা