J'utilise Mongoose, MongoDB et Node.
J'aimerais définir un schéma dans lequel l'un de ses champs est une date\timestamp.
J'aimerais utiliser ce champ pour renvoyer tous les enregistrements mis à jour au cours des 5 dernières minutes.
Comme je ne peux pas utiliser la méthode Timestamp () dans Mongoose, je comprends que ma seule option est d’utiliser la méthode Javascript suivante:
time : { type: Number, default: (new Date()).getTime() }
Ce n'est probablement pas le moyen le plus efficace d'interroger une base de données gigantesque. J'apprécierais vraiment si quelqu'un pouvait partager un moyen plus efficace de mettre cela en œuvre.
Est-il possible d'implémenter cela avec Mongoose et de pouvoir utiliser un horodatage MongoDB?
Éditer - 20 mars 2016
Mongoose supporte maintenant timestamps for collections .
S'il vous plaît examiner la réponse de @bobbyz ci-dessous. Peut-être que c'est ce que vous recherchez.
Mongoose supporte un type Date
(qui est essentiellement un horodatage):
time : { type : Date, default: Date.now }
Avec la définition de champ ci-dessus, chaque fois que vous enregistrez un document avec un champ non défini time
, Mongoose remplira ce champ avec l'heure actuelle.
La version actuelle de Mongoose (v4.x) comporte l'horodatage en tant qu'option intégrée à un schéma:
var mySchema = new mongoose.Schema( {name: String}, {timestamps: true} );
Cette option ajoute les propriétés createdAt
et updatedAt
horodatées avec un Date
et effectuant tout le travail à votre place. Chaque fois que vous mettez à jour le document, il met à jour la propriété updatedAt
. Docs. D'horodatage de schéma
var ItemSchema = new Schema({
name : { type: String }
});
ItemSchema.set('timestamps', true); // this will add createdAt and updatedAt timestamps
Si vous souhaitez renommer createdAt et updatedAt en noms personnalisés
const mongoose = require('mongoose');
const { Schema } = mongoose;
const schemaOptions = {
timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' },
};
const mySchema = new Schema({ name: String }, schemaOptions);
D'abord: npm install mongoose-timestamp
Suivant: let Timestamps = require('mongoose-timestamp')
Suivant: let MySchema = new Schema
Suivant: MySchema.plugin(Timestamps)
Suivant: const Collection = mongoose.model('Collection',MySchema)
Ensuite, vous pouvez utiliser le Collection.createdAt
Ou le Collection.updatedAt
Partout où vous le souhaitez.
Créé le: Date de la semaine Mois Date Année 00:00:00 GMT
Le temps est dans ce format.
J'aimerais utiliser ce champ pour renvoyer tous les enregistrements mis à jour au cours des 5 dernières minutes.
Cela signifie que vous devez mettre à jour la date à "maintenant" chaque fois que vous enregistrez l'objet. Peut-être trouverez-vous cela utile: plug-in Moongoose create-modified