Để lọc các tài liệu có trường ngày tháng nằm trong một khoảng thời gian xác định, MongoDB sử dụng các toán tử so sánh $gt (lớn hơn), $gte (lớn hơn hoặc bằng), $lt (nhỏ hơn), $lte (nhỏ hơn hoặc bằng) kết hợp với đối tượng ISODate.
1. Tạo bộ sưu tập và chèn dữ liệu ngày giờ
> db.demo60.insertOne({ "ArrivalDate": new ISODate("2019-01-11 12:30:10") });
> db.demo60.insertOne({ "ArrivalDate": new ISODate("2019-10-12 03:10:00") });
> db.demo60.insertOne({ "ArrivalDate": new ISODate("2019-01-14 05:11:20") });
2. Xem dữ liệu
> db.demo60.find();
Kết quả:
{ "_id": ObjectId("..."), "ArrivalDate": ISODate("2019-01-11T12:30:10Z") }
{ "_id": ObjectId("..."), "ArrivalDate": ISODate("2019-10-12T03:10:00Z") }
{ "_id": ObjectId("..."), "ArrivalDate": ISODate("2019-01-14T05:11:20Z") }
3. Truy vấn bản ghi từ 2019-01-09 đến 2019-01-16
> db.demo60.find({
"ArrivalDate": {
$gt: ISODate("2019-01-09T12:30:10Z"),
$lt: ISODate("2019-01-16T12:30:10Z")
}
});
4. Kết quả
{ "_id": ObjectId("..."), "ArrivalDate": ISODate("2019-01-11T12:30:10Z") }
{ "_id": ObjectId("..."), "ArrivalDate": ISODate("2019-01-14T05:11:20Z") }
Lưu ý quan trọng:
- Luôn dùng
ISODate()hoặcnew Date()để đảm bảo kiểu Date đúng, tránh so sánh chuỗi (string) gây sai lệch. - Tạo index trên trường ngày để tăng tốc truy vấn range:
db.demo60.createIndex({ ArrivalDate: 1 }). - Để bao gồm cả ngày đầu/cuối, dùng
$gtevà$lte.