Lấy tháng hiện tại trừ 1 để truy vấn tháng trước. Tạo collection:
> 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") }
Hiển thị tài liệu:
> db.findOneMonthAgoData.find();
Truy vấn tháng trước (giả sử hiện tại 26/12/2019):
> monthData = new Date(); // ISODate("2019-12-26T16:43:04.283Z") > monthData.setMonth(monthData.getMonth() - 1); // 1574786584283 (26/11/2019) > db.findOneMonthAgoData.find({PurchaseDate: {$gte: monthData}});Kết quả - Chris (26/12) và Bob (26/11/2020) vì >= 26/11/2019:
Lưu ý: Cách này dùng JavaScript Date ở client. Trong production, nên dùng aggregation
$dateSubtract(MongoDB 5.0+) hoặc tính toán ngày đầu/cuối tháng phía ứng dụng để query chính xác tháng lịch.