Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

ค้นหาเอกสารที่หมดอายุก่อนวันนี้ใน MongoDB ด้วย $lte และ Date()

บทความนี้สาธิตการใช้ Operator $lte (Less Than or Equal) ร่วมกับ new Date() เพื่อค้นหาเอกสารที่ฟิลด์วันที่ (ArrivalDate) น้อยกว่าหรือเท่ากับวันที่ปัจจุบัน (Expired)

สร้างข้อมูลตัวอย่าง (วันที่ปัจจุบันสมมติเป็น 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") }

แสดงข้อมูลทั้งหมด

> db.getDocumentsExpiredDemo.find().pretty();
{
  "_id" : ObjectId("5cd563b17924bb85b3f4893b"),
  "ArrivalDate" : ISODate("2019-05-11T00:00:00Z")
}
{
  "_id" : ObjectId("5cd563bf7924bb85b3f4893c"),
  "ArrivalDate" : ISODate("2019-01-01T00:00:00Z")
}
{
  "_id" : ObjectId("5cd563ca7924bb85b3f4893d"),
  "ArrivalDate" : ISODate("2019-05-10T00:00:00Z")
}
{
  "_id" : ObjectId("5cd563e77924bb85b3f4893e"),
  "ArrivalDate" : ISODate("2019-02-01T00:00:00Z")
}

ค้นหาเอกสารที่ ArrivalDate <= วันนี้ (Expired)

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

ผลลัพธ์ (ไม่รวม 2019-05-11 เพราะเท่ากับวันนี้ แต่ $lte รวมวันนี้ด้วย - ขึ้นอยู่กับเวลาที่รัน)

{
  "_id" : ObjectId("5cd563bf7924bb85b3f4893c"),
  "ArrivalDate" : ISODate("2019-01-01T00:00:00Z")
}
{
  "_id" : ObjectId("5cd563ca7924bb85b3f4893d"),
  "ArrivalDate" : ISODate("2019-05-10T00:00:00Z")
}
{
  "_id" : ObjectId("5cd563e77924bb85b3f4893e"),
  "ArrivalDate" : ISODate("2019-02-01T00:00:00Z")
}

คำอธิบาย

  • new Date() ใน Mongo Shell คืนค่า DateTime ปัจจุบันของ Server
  • $lte = Less Than or Equal (น้อยกว่าหรือเท่ากับ)
  • ISODate เก็บเป็น UTC เวลา 00:00:00Z หากรันตอนกลางวัน วันที่เดียวกันจะถือว่า "น้อยกว่า" (ยังไม่ถึงเวลา)

ตัวอย่างเพิ่มเติม: ช่วงวันที่ (Between)

// ระหว่าง 2019-01-01 ถึง 2019-12-31
db.collection.find({
  "dateField": {
    $gte: new ISODate("2019-01-01"),
    $lte: new ISODate("2019-12-31")
  }
});

ตัวอย่าง: ไม่นับวันนี้ (Strictly Before Today)

// ใช้ $lt แทน $lte
db.collection.find({ "dateField": { $lt: new Date() } });