หากคุณต้องการได้รับสิ่งใหม่ทั้งหมดในช่วง 5 นาทีที่ผ่านมาคุณจะต้องทำการคำนวณบางอย่าง แต่มันก็ไม่ยาก ...
ขั้นแรกให้สร้างดัชนีบนคุณสมบัติที่คุณต้องการจับคู่ (รวมถึงทิศทางการจัดเรียง -1 สำหรับการเรียงจากมากไปน้อยและ 1 สำหรับการเรียงจากน้อยไปมาก)
db.things.createIndex({ createdAt: -1 }) // descending order on .createdAt
จากนั้นค้นหาเอกสารที่สร้างขึ้นใน 5 นาทีที่ผ่านมา (60 วินาที * 5 นาที) .... เพราะจาวาสคริปต์.getTime()ส่งกลับมิลลิวินาทีคุณจะต้องทวีคูณเป็น 1,000 ก่อนที่คุณจะใช้มันเป็นอินพุทของคอนnew Date()สตรัคเตอร์
db.things.find({
createdAt: {
$gte: new Date(new Date().getTime()-60*5*1000).toISOString()
}
})
.count()
คำอธิบายสำหรับnew Date(new Date().getTime()-60*5*1000).toISOString()มีดังนี้:
ก่อนอื่นเราคำนวณ "5 นาทีก่อน":
new Date().getTime() ทำให้เรามีเวลาปัจจุบันเป็นมิลลิวินาที
- เราต้องการลบ 5 นาที (เป็น ms) จากนั้น:
5*60*1000- ฉันแค่คูณด้วย60วินาทีเพื่อให้ง่ายต่อการเปลี่ยนแปลง ฉันสามารถเปลี่ยน5เป็น120ถ้าฉันต้องการ 2 ชั่วโมง (120 นาที)
new Date().getTime()-60*5*1000ให้เรา1484383878676(5 นาทีที่แล้วในหน่วยมิลลิวินาที)
ตอนนี้เราต้องป้อนข้อมูลนั้นให้เป็นตัวnew Date()สร้างเพื่อให้ได้รูปแบบสตริง ISO ที่ต้องการโดยการประทับเวลา MongoDB
{ $gte: new Date(resultFromAbove).toISOString() } (mongodb .find () แบบสอบถาม)
- เนื่องจากเราไม่สามารถมีตัวแปรเราจึงทำได้ทั้งหมดในนัดเดียว:
new Date(new Date().getTime()-60*5*1000)
- ... จากนั้นแปลงเป็นสตริง ISO:
.toISOString()
new Date(new Date().getTime()-60*5*1000).toISOString() ให้เรา 2017-01-14T08:53:17.586Z
แน่นอนว่านี่เป็นเรื่องง่ายขึ้นเล็กน้อยเกี่ยวกับตัวแปรถ้าคุณใช้ไดรเวอร์ node-mongodb-native แต่สิ่งนี้ทำงานได้ในเชลล์ mongo ซึ่งเป็นสิ่งที่ฉันมักใช้ตรวจสอบสิ่งต่าง ๆ