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

Lấy tài liệu hết hạn trước hôm nay trong MongoDB

Để tìm các tài liệu có ngày hết hạn (expiration date) trước ngày hiện tại, MongoDB sử dụng toán tử so sánh $lte (less than or equal) kết hợp với new Date() hoặc ISODate().

Tạo dữ liệu mẫu

Giả sử ngày hiện tại là 2019-05-11:

> db.getDocumentsExpiredDemo.insertOne({"ArrivalDate": new ISODate("2019-05-11")});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd563b17924bb85b3f4893b") }
> db.getDocumentsExpiredDemo.insertOne({"ArrivalDate": new ISODate("2019-01-01")});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd563bf7924bb85b3f4893c") }
> db.getDocumentsExpiredDemo.insertOne({"ArrivalDate": new ISODate("2019-05-10")});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd563ca7924bb85b3f4893d") }
> db.getDocumentsExpiredDemo.insertOne({"ArrivalDate": new ISODate("2019-02-01")});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd563e77924bb85b3f4893e") }

Xem tất cả tài liệu

> db.getDocumentsExpiredDemo.find().pretty();

Truy vấn tài liệu hết hạn trước hôm nay

> db.getDocumentsExpiredDemo.find({ "ArrivalDate": { $lte : new Date() } });

Kết quả (ngày hiện tại = 2019-05-11)


Giải thích

  • $lte: Less Than or Equal (nhỏ hơn hoặc bằng)
  • new Date(): Trả về ngày/giờ hiện tại của server MongoDB
  • Tài liệu 2019-05-11 được bao gồm vì dùng $lte (không phải $lt)
  • ISODate được lưu trữ ở UTC, lưu ý múi giờ khi so sánh

Các biến thể thường dùng

Nhu cầuTruy vấn
Hết hạn trước hôm nay (không tính hôm nay){$lt: new Date()}
Hết hạn tính cả hôm nay{$lte: new Date()}
Chưa hết hạn (tương lai){$gt: new Date()}
Khoảng thời gian cụ thể{$gte: startDate, $lte: endDate}

Lưu ý quan trọng

  • Đảm bảo trường ngày tháng có kiểu Date (ISODate), không phải String
  • Tạo index trên trường ngày để tối ưu truy vấn: db.collection.createIndex({ArrivalDate: 1})
  • MongoDB Shell: new Date() trả về thời gian server; Driver: truyền Date object từ ứng dụng