2012-04-04 7 views
42

Ich verwende Mongoose, MongoDB und Node.Welcher SchemaTyp in Mongoose eignet sich am besten für Timestamp?

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

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

Aufgrund der Tatsache, dass in Mongoose ich nicht die Zeitstempel() -Methode kann ich verstehen, dass meine einzige Möglichkeit ist, die folgende JavaScript-Methode zu verwenden:

time : { type: Number, default: (new Date()).getTime() } 

Es ist wahrscheinlich nicht der effizienteste Weg für eine humongous DB abfragen. Ich würde es wirklich schätzen, wenn jemand eine effizientere Art der Umsetzung dieses teilen könnte.

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

Antwort

73

Bearbeiten - 20. März 2016

Mongoose unterstützen jetzt timestamps for collections.

Bitte beachten Sie die Antwort von @bobbyz unten. Vielleicht suchen Sie das?

Ursprüngliche Antwort

Mongoose unterstützt eine Date Art (die im Grunde ein Zeitstempel):

time : { type : Date, default: Date.now } 

Mit der obigen Felddefinition, jedes Mal, wenn Sie ein Dokument mit einem nicht ausgehärteten time Feld speichern, Mongoose werden Füllen Sie dieses Feld mit der aktuellen Uhrzeit aus.

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

+0

Vielen Dank für die Antwort, aber was ich versuche zu verstehen, ist die beste Möglichkeit, um alle Datensätze, die in den letzten 5 Minuten aktualisiert wurden, abzufragen. Meinst du, ich sollte verwenden: Datum: {$ gt: (Math.round ((neues Date()). GetTime()/1000)) - 300)} – Liatz

+1

@ user1103897 Sie können ein Date-Objekt direkt erstellen und verwenden mit $ gt so: var now = new Date(); var fiveminago = neues Datum (jetzt.getTime() - 5 * 60 * 1000); dann abfragen mit {date: {$ gt: fiveminago}} – mpobrien

+13

Sollte wahrscheinlich 'Date.now' anstelle von' Date.now() 'sein. – elmigranto

0

Ich mag würde dieses Feld, um alle Datensätze zurück zu verwenden, die in den letzten 5 Minuten aktualisiert wurden.

Das bedeutet, dass Sie das Datum bei jedem Speichern des Objekts auf "jetzt" aktualisieren müssen. Vielleicht werden Sie dies nützlich finden: Moongoose create-modified plugin

54

Die aktuelle Version von Mongoose (v4.x) hat Zeit zu einem Schema als integrierte Option Stanzen:

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

Diese Option fügt createdAt und updatedAt Eigenschaften das ist mit einem Date Timestamped, und das macht die ganze Arbeit für Sie. Jedes Mal, wenn Sie das Dokument aktualisieren, wird die Eigenschaft updatedAt aktualisiert. Schema Timestamps Docs.