Welcher Schematyp in Mongoose eignet sich am besten für Zeitstempel?

Ich benutze Mongoose, MongoDB und Node.

Ich möchte ein Schema definieren, in dem eines seiner Felder ein Datum / Zeitstempel ist.

Ich möchte dieses Feld verwenden, um alle Datensätze zurückzugeben, die in den letzten 5 Minuten aktualisiert wurden.

Aufgrund der Tatsache, dass ich in Mongoose die Timestamp () -Methode nicht verwenden kann, verstehe ich, dass meine einzige Option darin besteht, die folgende Javascript-Methode zu verwenden:

<code>time : { type: Number, default: (new Date()).getTime() } 
</code>

Dies ist wahrscheinlich nicht die effizienteste Methode zum Abfragen einer umfangreichen Datenbank. Ich würde es wirklich begrüßen, wenn jemand eine effizientere Art und Weise der Umsetzung teilen könnte.

Gibt es eine Möglichkeit, dies mit Mongoose zu implementieren und einen MongoDB-Zeitstempel zu verwenden?

Antworten auf die Frage(4)

l als integrierte Option für ein Schema:

<code>var mySchema = new mongoose.Schema( {name: String}, {timestamps: true} );
</code>

Diese Option fügt hinzucreatedAt undupdatedAt Eigenschaften, die mit einem Zeitstempel versehen sindDate, und das erledigt die ganze Arbeit für Sie. Jedes Mal, wenn Sie das Dokument aktualisieren, wird das Dokument aktualisiertupdatedAt Eigentum.Schema Timestamps Docs.

 bobbyz30. Apr. 2019, 20:23
@tar Ich gehe davon aus, dass es immer noch funktioniert, aber die 4.x-Dokumentation erwähnte dies ausdrücklichtimestamps: trueDaher müssen in Zukunft möglicherweise einige zusätzliche Überlegungen angestellt werden. (Vielleicht lehnen sie es ab? Sie haben Recht, die Dokumente sind für diese Option nicht sehr klar.)
 tar29. Apr. 2019, 18:35
Vielen Dank, die Dokumente waren nicht klar, dass man sie verwenden könntetimestamps: true anstatt die Namen mit zu überschreibentimestamps: {...}.
<code>var ItemSchema = new Schema({
    name : { type: String }
});

ItemSchema.set('timestamps', true); // this will add createdAt and updatedAt timestamps
</code>

https://mongoosejs.com/docs/guide.html#timestamps

um alle Datensätze zurückzugeben, die in den letzten 5 Minuten aktualisiert wurden.

Dies bedeutet, dass Sie das Datum jedes Mal auf "Jetzt" aktualisieren müssen, wenn Sie das Objekt speichern. Vielleicht finden Sie das nützlich:Moongoose-Plugin, das geändert wurde

Lösung für das Problem

Bearbeiten - 20. März 2016

Mungo jetzt unterstützenZeitstempel für Sammlungen.

Bitte beachten Sie die Antwort von @bobbyz unten. Vielleicht ist es das, wonach Sie suchen.

Ursprüngliche Antwort

Mungo unterstützt aDate Typ (der im Grunde genommen ein Zeitstempel ist):

<code>time : { type : Date, default: Date.now }
</code>

Mit der obigen Felddefinition können Sie jedes Mal ein Dokument mit einem nicht festgelegten Wert speicherntime Mungo füllt dieses Feld mit der aktuellen Uhrzeit aus.

Quelle:http://mongoosejs.com/docs/guide.html

 Aleksei Zabrodskii25. Dez. 2012, 20:18
Sollte wohl seinDate.now anstattDate.now().
 mpobrien12. Apr. 2012, 21:09
@ user1103897 Sie können ein Date-Objekt direkt erstellen und mit $ gt wie folgt verwenden: var now = new Date (); var fiveminago = new Date (now.getTime () - 5 * 60 * 1000); dann Abfrage mit {Datum: {$ gt: fiveminago}}
 mikemaccana24. Juni 2014, 11:49
Erläuterung:Date.now daDate.now ist eine Funktion, die ausgeführt wird, wenn Sie Objekte erstellen.Date.now() ist das Datum, an dem Siemodels.js wurde analysiert. Dh wenn Sie verwendenDate.now() Alle Ihre Objekte haben das gleiche Datum, und das ist das Datummodels.js wurde analysiert.
 Liatz04. Apr. 2012, 12:02
Vielen Dank für die Antwort, aber was ich zu verstehen versuche, ist der beste Weg, um für die Rückgabe aller Datensätze abzufragen, die in den letzten 5 Minuten aktualisiert wurden. Meinen Sie, ich sollte verwenden: Datum: {$ gt: ((Math.round ((neues Datum ()). GetTime () / 1000)) - 300)}
 Aaron19. Jan. 2013, 05:29
+1 elmigranto, Mongoose docs Beispiel verwendet Date.nowmongoosejs.com/docs/guide.html

Ihre Antwort auf die Frage