Để lọc document theo điều kiện ngày tháng, sử dụng $match trong pipeline aggregate() kết hợp các toán tử so sánh ngày ($gte, $lte, $gt, $lt).
Tạo collection với ngày giao hàng
> db.demo491.insertOne({"ShippingDate": new ISODate("2020-01-10")});
> db.demo491.insertOne({"ShippingDate": new ISODate("2020-02-21")});
> db.demo491.insertOne({"ShippingDate": new ISODate("2020-03-23")});
> db.demo491.insertOne({"ShippingDate": new ISODate()}); // ngày hiện tại
Hiển thị tất cả
> db.demo491.find();
Kết quả:
2020-01-10, 2020-02-21, 2020-03-23, 2020-04-01 (giả lập)
Aggregate $match ngày >= 2020-02-24
> db.demo491.aggregate([
{
'$match': {
'ShippingDate': { '$gte': ISODate('2020-02-24T18:10:11.000Z') }
}
}
]);
Kết quả (2 document sau 24/02):
{
"_id": ObjectId("5e849a1db0f3fa88e22790c0"),
"ShippingDate": ISODate("2020-03-23T00:00:00Z")
}
{
"_id": ObjectId("5e849a28b0f3fa88e22790c1"),
"ShippingDate": ISODate("2020-04-01T13:42:00.090Z")
}
Các toán tử so sánh ngày phổ biến:
$gte: Greater than or equal (>=)$gt: Greater than (>)$lte: Less than or equal (<=)$lt: Less than (<)$in: Trong danh sách ngày$nin: Không trong danh sách
Khoảng ngày (range):
{
$match: {
ShippingDate: {
$gte: ISODate("2020-01-01"),
$lt: ISODate("2020-04-01")
}
}
}
Lưu ý: Luôn dùng ISODate() hoặc new Date() cho giá trị so sánh, không dùng chuỗi. Index trên trường Date giúp tăng tốc truy vấn range lớn.