Wenn Sie in den letzten 5 Minuten alle neuen Dinge erhalten möchten, müssten Sie einige Berechnungen durchführen, aber es ist nicht schwer ...
Erstellen Sie zunächst einen Index für die Eigenschaft, mit der Sie übereinstimmen möchten (geben Sie die Sortierrichtung -1 für absteigend und 1 für aufsteigend an).
db.things.createIndex({ createdAt: -1 }) // descending order on .createdAt
.getTime()
Fragen Sie dann nach Dokumenten ab, die in den letzten 5 Minuten (60 Sekunden * 5 Minuten) erstellt wurden. Da Javascript Millisekunden zurückgibt, müssen Sie um 1000 multiplizieren, bevor Sie es als Eingabe für den new Date()
Konstruktor verwenden.
db.things.find({
createdAt: {
$gte: new Date(new Date().getTime()-60*5*1000).toISOString()
}
})
.count()
Die Erklärung für new Date(new Date().getTime()-60*5*1000).toISOString()
lautet wie folgt:
Zuerst berechnen wir "vor 5 Minuten":
new Date().getTime()
gibt uns die aktuelle Zeit in Millisekunden
- Wir wollen 5 Minuten (in ms) davon abziehen:
5*60*1000
- Ich multipliziere nur mit 60
Sekunden, damit es leicht zu ändern ist. Ich kann einfach wechseln 5
, 120
wenn ich 2 Stunden (120 Minuten) möchte.
new Date().getTime()-60*5*1000
gibt uns 1484383878676
(vor 5 Minuten in ms)
Jetzt müssen wir das in einen new Date()
Konstruktor einspeisen, um das ISO-Zeichenfolgenformat zu erhalten, das für MongoDB-Zeitstempel erforderlich ist.
{ $gte: new Date(resultFromAbove).toISOString() }
(mongodb .find () Abfrage)
- Da wir keine Variablen haben können, machen wir alles auf einmal:
new Date(new Date().getTime()-60*5*1000)
- ... dann in ISO-String konvertieren:
.toISOString()
new Date(new Date().getTime()-60*5*1000).toISOString()
gibt uns 2017-01-14T08:53:17.586Z
Natürlich ist dies mit Variablen etwas einfacher, wenn Sie den Node-Mongodb-Native-Treiber verwenden, aber dies funktioniert in der Mongo-Shell, mit der ich normalerweise Dinge überprüfe.