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

MongoDB-এ গত মাসের ডেটা কোয়েরি করা

MongoDB-এ বর্তমান তারিখ থেকে এক মাস পিছনে গিয়ে গত মাসের রেকর্ডগুলো খুঁজে বের করতে জাভাস্ক্রিপ্টের Date অবজেক্ট এবং setMonth() মেথড ব্যবহার করা হয়।

নমুনা কালেকশন তৈরি

> db.findOneMonthAgoData.insertOne({ "CustomerName": "Chris", "PurchaseDate": new ISODate("2019-12-26") });
{ "acknowledged": true, "insertedId": ObjectId("5e04e16c150ee0e76c06a04f") }

> db.findOneMonthAgoData.insertOne({ "CustomerName": "David", "PurchaseDate": new ISODate("2019-11-26") });
{ "acknowledged": true, "insertedId": ObjectId("5e04e178150ee0e76c06a050") }

> db.findOneMonthAgoData.insertOne({ "CustomerName": "Bob", "PurchaseDate": new ISODate("2020-11-26") });
{ "acknowledged": true, "insertedId": ObjectId("5e04e186150ee0e76c06a051") }

সমস্ত ডকুমেন্ট প্রদর্শন

> db.findOneMonthAgoData.find();

আউটপুট:

{ "_id": ObjectId("5e04e16c150ee0e76c06a04f"), "CustomerName": "Chris", "PurchaseDate": ISODate("2019-12-26T00:00:00Z") }
{ "_id": ObjectId("5e04e178150ee0e76c06a050"), "CustomerName": "David", "PurchaseDate": ISODate("2019-11-26T00:00:00Z") }
{ "_id": ObjectId("5e04e186150ee0e76c06a051"), "CustomerName": "Bob", "PurchaseDate": ISODate("2020-11-26T00:00:00Z") }

গত মাসের ডেটা কোয়েরি

> monthData = new Date(); 
ISODate("2019-12-26T16:43:04.283Z")
> monthData.setMonth(monthData.getMonth() - 1);
1574786584283
> db.findOneMonthAgoData.find({ PurchaseDate: { $gte: monthData } });

ফলাফল

{ "_id": ObjectId("5e04e16c150ee0e76c06a04f"), "CustomerName": "Chris", "PurchaseDate": ISODate("2019-12-26T00:00:00Z") }
{ "_id": ObjectId("5e04e186150ee0e76c06a051"), "CustomerName": "Bob", "PurchaseDate": ISODate("2020-11-26T00:00:00Z") }

ব্যাখ্যা:

  • new Date() - বর্তমান তারিখ (উদাহরণে ২০১৯-১২-২৬)।
  • setMonth(getMonth() - 1) - এক মাস কমিয়ে ২০১৯-১১-২৬ করে।
  • $gte: monthData - এই তারিখের পর বা সমান যেগুলো।
  • ফলাফলে ২০১৯-১২-২৬ এবং ২০২০-১১-২৬ আসে (২০১৯-১১-২৬ বাদ পড়ে, কারণ সেটি ঠিক এক মাস আগে, $gte ইনক্লুসিভ)।

উন্নত পদ্ধতি: অ্যাগ্রিগেশনে $$NOW

MongoDB ৪.২+ এ অ্যাগ্রিগেশন পাইপলাইনে ভেরিয়েবল ব্যবহার করা যায়:

db.findOneMonthAgoData.aggregate([
  { $match: { 
      PurchaseDate: { 
        $gte: { $dateSubtract: { startDate: "$$NOW", unit: "month", amount: 1 } } 
      } 
    } 
  }
]);

এটি সার্ভার-সাইডে সময় ক্যালকুলেট করে, ক্লায়েন্টের সময়ে নির্ভর করে না।

  1. MongoDB-এ কালেকশন থেকে টপমোস্ট (প্রথম) ডকুমেন্ট বের করা

  2. MongoDB-এ ISODate থেকে বছর, মাস, দিন, ঘন্টা ইত্যাদি বের করা

  3. MongoDB-এ নেস্টেড ডকুমেন্ট থেকে শুধু কী (keys) বের করা

  4. MySQL-এ SUBSTRING এবং LOCATE দিয়ে পোস্টকোডের প্রথম অংশ বের করা