web-dev-qa-db-fra.com

Quel type de schéma dans Mongoose convient le mieux à l'horodatage?

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?

62
Liatz

É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.

Réponse originale

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.

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

106
drinchev

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

93
bobbyz
var ItemSchema = new Schema({
    name : { type: String }
});

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

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

3
Nikolay_R

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);
0
cegprakash

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.

0
shengsheng

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

0
Fletch