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:
time : { type: Number, default: (new Date()).getTime() }
Dies ist wahrscheinlich nicht die effizienteste Methode zum Abfragen einer riesigen Datenbank. Ich würde es wirklich begrüßen, wenn jemand einen effizienteren Weg zur Umsetzung teilen könnte.
Gibt es eine Möglichkeit, dies mit Mongoose zu implementieren und einen MongoDB-Zeitstempel zu verwenden?
Date.now
statt seinDate.now()
.Date.now
weilDate.now
ist eine Funktion, die ausgeführt wird, wenn Sie Objekte erstellen.Date.now()
ist das Datum, an dem Siemodels.js
analysiert wurden. Das heißt, wenn SieDate.now()
alle Ihre Objekte verwenden, haben sie das gleiche Datum, und das ist das Datum, an dem siemodels.js
analysiert wurden.Die aktuelle Version von Mongoose (v4.x) verfügt über eine Zeitstempelung als integrierte Option für ein Schema:
var mySchema = new mongoose.Schema( {name: String}, {timestamps: true} );
Durch diese Option wird
createdAt
undupdatedAt
Eigenschaften , die mit einem Zeitstempel versehen werdenDate
, und die die ganze Arbeit für Sie. Jedes Mal, wenn Sie das Dokument aktualisieren, wird dieupdatedAt
Eigenschaft aktualisiert . Schema-Zeitstempel-Dokumente.quelle
timestamps: true
anstatt die Namen mit zu überschreibentimestamps: {...}
.timestamps: true
, sodass in Zukunft möglicherweise einige zusätzliche Überlegungen erforderlich sind. (Vielleicht lehnen sie es ab? Sie haben Recht, die Dokumente sind für diese Option nicht sehr klar.)Falls Sie benutzerdefinierte Namen für "createdAt" und "updatedAt" wünschen
const mongoose = require('mongoose'); const { Schema } = mongoose; const schemaOptions = { timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' }, }; const mySchema = new Schema({ name: String }, schemaOptions);
quelle
var ItemSchema = new Schema({ name : { type: String } }); ItemSchema.set('timestamps', true); // this will add createdAt and updatedAt timestamps
Dokumente: https://mongoosejs.com/docs/guide.html#timestamps
quelle
{ timestamps: true }
als zweites Argument einfach weitergebennew Schema({}, {<here>})
.Dies bedeutet, dass Sie das Datum jedes Mal, wenn Sie das Objekt speichern, auf "Jetzt" aktualisieren müssen. Vielleicht finden Sie dies nützlich: Moongoose-Plugin zum Erstellen von Modifikationen
quelle
Zuerst :
npm install mongoose-timestamp
Nächster:
let Timestamps = require('mongoose-timestamp')
Nächster:
let MySchema = new Schema
Nächster:
MySchema.plugin(Timestamps)
Nächster :
const Collection = mongoose.model('Collection',MySchema)
Dann können Sie das
Collection.createdAt
oderCollection.updatedAt
überall verwenden, wo Sie wollen.Erstellt am: Datum der Woche Monat Datum Jahr 00:00:00 GMT
Die Zeit ist in diesem Format.
quelle