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?
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:
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 }}
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});
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.
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