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

วิธีค้นหาข้อมูลตามวันที่เฉพาะใน MongoDB

สมมติว่าคุณบันทึกวันที่ล็อกอินของผู้ใช้ และต้องการนับจำนวนเรคคอร์ดในวันที่เฉพาะ ให้ใช้ตัวดำเนินการ $gte และ $lt ร่วมกับ count() เริ่มต้นด้วยการสร้างคอลเลกชันตัวอย่าง:

> db.findDataByDateDemo.insertOne({"UserName":"John","UserLoginDate":new ISODate("2019-01-31")});
{ "acknowledged" : true, "insertedId" : ObjectId("5cdd8cd7bf3115999ed511ed") }
> db.findDataByDateDemo.insertOne({"UserName":"Larry","UserLoginDate":new ISODate("2019-02-01")});
{ "acknowledged" : true, "insertedId" : ObjectId("5cdd8ce7bf3115999ed511ee") }
> db.findDataByDateDemo.insertOne({"UserName":"Sam","UserLoginDate":new ISODate("2019-05-02")});
{ "acknowledged" : true, "insertedId" : ObjectId("5cdd8cf3bf3115999ed511ef") }
> db.findDataByDateDemo.insertOne({"UserName":"David","UserLoginDate":new ISODate("2019-05-16")});
{ "acknowledged" : true, "insertedId" : ObjectId("5cdd8d00bf3115999ed511f0") }
> db.findDataByDateDemo.insertOne({"UserName":"Carol","UserLoginDate":new ISODate("2019-10-19")});
{ "acknowledged" : true, "insertedId" : ObjectId("5cdd8d0ebf3115999ed511f1") }

แสดงเอกสารทั้งหมด:

> db.findDataByDateDemo.find();

ผลลัพธ์:

{ "_id" : ObjectId("5cdd8cd7bf3115999ed511ed"), "UserName" : "John", "UserLoginDate" : ISODate("2019-01-31T00:00:00Z") }
{ "_id" : ObjectId("5cdd8ce7bf3115999ed511ee"), "UserName" : "Larry", "UserLoginDate" : ISODate("2019-02-01T00:00:00Z") }
{ "_id" : ObjectId("5cdd8cf3bf3115999ed511ef"), "UserName" : "Sam", "UserLoginDate" : ISODate("2019-05-02T00:00:00Z") }
{ "_id" : ObjectId("5cdd8d00bf3115999ed511f0"), "UserName" : "David", "UserLoginDate" : ISODate("2019-05-16T00:00:00Z") }
{ "_id" : ObjectId("5cdd8d0ebf3115999ed511f1"), "UserName" : "Carol", "UserLoginDate" : ISODate("2019-10-19T00:00:00Z") }

คิวรี่หาผู้ใช้ที่ล็อกอินระหว่างวันที่ 2019-05-02 ถึง 2019-05-17 (ใช้ $gte และ $lt):

> db.findDataByDateDemo.count({
  "UserLoginDate":{
    "$gte": new Date("2019-05-02"),
    "$lt": new Date("2019-05-18")
  }
});

ผลลัพธ์ (พบ 2 เรคคอร์ด: Sam และ David):

2

หมายเหตุ: การใช้ $gte (มากกว่าหรือเท่ากับ) และ $lt (น้อยกว่า) ร่วมกันเป็นวิธีมาตรฐานในการค้นหาข้อมูลในช่วงวันที่ (date range) ให้แม่นยำที่สุด เพราะครอบคลุมทั้งวันเริ่มต้นและไม่รวมวันสิ้นสุด