หากคุณต้องการได้รับสิ่งใหม่ทั้งหมดในช่วง 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 ซึ่งเป็นสิ่งที่ฉันมักใช้ตรวจสอบสิ่งต่าง ๆ