web-dev-qa-db-fra.com

Définition de l'heure d'expiration d'une collection dans mongodb à l'aide de mangouste

Vous trouverez ci-dessous la commande qui peut être utilisée via le terminal mongo pour définir une heure d'expiration pour les collections (un TTL):

db.log.events.ensureIndex( { "status": 1 }, { expireAfterSeconds: 3600 } )

Comment faire cela à partir de mon code dans Node.js en utilisant la mangouste?

32
Amanda G

Dans Mongoose, vous créez un index TTL sur un champ Date via la propriété expires dans la définition de schéma de ce champ:

// expire docs 3600 seconds after createdAt
new Schema({ createdAt: { type: Date, expires: 3600 }});

Notez que:

  • La tâche d'expiration des données de MongoDB s'exécute une fois par minute, donc un document expiré peut persister jusqu'à une minute après son expiration.
  • Cette fonctionnalité nécessite MongoDB 2.2 ou version ultérieure.
  • C'est à vous de définir createdAt à l'heure actuelle lors de la création de documents, ou d'ajouter un default pour le faire pour vous comme suggéré ici .
    • { createdAt: { type: Date, expires: 3600, default: Date.now }}
77
JohnnyHK

ce code fonctionne pour moi.

que cela aide

let currentSchema = mongoose.Schema({
    id: String,
    name: String,
    packageId: Number,
    age: Number
}, {timestamps: true});

currentSchema.index({createdAt: 1},{expireAfterSeconds: 3600});
10
Sadegh Teimori

Fournir une chaîne à expires fonctionne également bien avec Mongoose si vous ne souhaitez pas traiter le calcul du délai d'expiration et améliorer la lisibilité globale du schéma.

Par exemple ici, nous définissons le expires sur 2m (2 minutes) et la mangouste se convertirait en 120 secondes pour nous:

var TestSchema = new mongoose.Schema({
  name: String,
  createdAt: { type: Date, expires: '2m', default: Date.now }
});

Mongoose créerait un index en arrière-plan et définirait automatiquement le expireAfterSeconds dans ce cas 120 secondes ( spécifié par le 2m ).

Il est important de noter que le processus TTL s'exécute une fois toutes les 60 secondes il n'est donc pas toujours parfaitement à l'heure.

4
Akrion

Il existe une bibliothèque npm - 'mongoose-ttl' .:

var schema = new Schema({..});
schema.plugin(ttl, { ttl: 5000 });

vous pouvez voir toutes les options de cette bibliothèque: https://www.npmjs.com/package/mongoose-ttl

0
arr