Jika Anda ingin mendapatkan semua hal baru dalam 5 menit terakhir, Anda harus melakukan beberapa perhitungan, tetapi itu tidak sulit ...
Pertama-tama buat indeks pada properti yang ingin Anda cocokkan (sertakan arah sortir -1 untuk turun dan 1 untuk naik)
db.things.createIndex({ createdAt: -1 }) // descending order on .createdAt
Kemudian kueri untuk dokumen yang dibuat dalam 5 menit terakhir (60 detik * 5 menit) .... karena javascript .getTime()
mengembalikan milidetik, Anda harus mulitply sebanyak 1000 sebelum menggunakannya sebagai input ke new Date()
konstruktor.
db.things.find({
createdAt: {
$gte: new Date(new Date().getTime()-60*5*1000).toISOString()
}
})
.count()
Penjelasan untuk new Date(new Date().getTime()-60*5*1000).toISOString()
adalah sebagai berikut:
Pertama-tama kami menghitung "5 menit yang lalu":
new Date().getTime()
memberi kami waktu saat ini dalam milidetik
- Kami ingin mengurangi 5 menit (dalam ms) dari itu:
5*60*1000
- Saya hanya mengalikan dengan 60
detik sehingga mudah diubah. Saya hanya dapat mengubah 5
ke 120
jika saya ingin 2 jam (120 menit).
new Date().getTime()-60*5*1000
beri kami 1484383878676
(5 menit lalu dalam ms)
Sekarang kita perlu memasukkannya ke dalam new Date()
konstruktor untuk mendapatkan format string ISO yang diperlukan oleh cap waktu MongoDB.
{ $gte: new Date(resultFromAbove).toISOString() }
(mongodb .find () permintaan)
- Karena kita tidak dapat memiliki variabel, kita melakukan semuanya dalam satu kesempatan:
new Date(new Date().getTime()-60*5*1000)
- ... lalu konversikan ke string ISO:
.toISOString()
new Date(new Date().getTime()-60*5*1000).toISOString()
memberi kita 2017-01-14T08:53:17.586Z
Tentu saja ini sedikit lebih mudah dengan variabel jika Anda menggunakan driver simpul-mongodb-asli, tetapi ini bekerja di shell mongo yang biasanya saya gunakan untuk memeriksa sesuatu.