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

Khớp ngày (match date) trong MongoDB với $match

Để 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.