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 } }
}
}
}
]);
এটি সার্ভার-সাইডে সময় ক্যালকুলেট করে, ক্লায়েন্টের সময়ে নির্ভর করে না।