Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Truy vấn MongoDB lấy bản ghi ngày trong khoảng thời gian

Để 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ặc new 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 $gte và $lte.