Установка времени истечения для коллекции в монгодбе с использованием мангуста
Ниже приведена команда, которая может использоваться через терминал mongo для установки времени истечения для коллекций (TTL):
db.log.events.ensureIndex( { "status": 1 }, { expireAfterSeconds: 3600 } )
Как это сделать из моего кода в Node.js с помощью mongoose?
Ответы
Ответ 1
В Mongoose, вы создаете индекс TTL на Date
поле при expires
свойства в определении схемы этого поля:
// expire docs 3600 seconds after createdAt
new Schema({ createdAt: { type: Date, expires: 3600 }});
Обратите внимание, что:
- Задача истечения срока действия данных MongoDB запускается раз в минуту, поэтому просроченный документ может сохраняться до минуты после истечения срока его действия.
- Эта функция требует MongoDB 2.2 или более поздней версии.
- При создании документов вам нужно установить значение
createdAt
на текущее время или добавить default
по default
чтобы сделать это для вас, как предлагается здесь. -
{ createdAt: { type: Date, expires: 3600, default: Date.now }}
Ответ 2
этот код работает для меня.
может ли он помочь
let currentSchema = mongoose.Schema({
id: String,
name: String,
packageId: Number,
age: Number
}, {timestamps: true});
currentSchema.index({createdAt: 1},{expireAfterSeconds: 3600});
Ответ 3
Предоставление строки с expires
также хорошо работает с Mongoose, если вы не хотите иметь дело с вычислением времени истечения и улучшаете общую читаемость схемы.
Например, здесь мы устанавливаем expires
на 2 м (2 минуты), и mongoose конвертирует в 120 секунд для нас:
var TestSchema = new mongoose.Schema({
name: String,
createdAt: { type: Date, expires: '2m', default: Date.now }
});
Mongoose создаст индекс в фоновом режиме и автоматически установит значение expireAfterSeconds
в этом случае 120
секунд (указано 2m).
Важно отметить, что процесс TTL выполняется один раз каждые 60 секунд, поэтому он не всегда выполняется вовремя.
Ответ 4
Есть библиотека npm - 'mongoose-ttl'.:
var schema = new Schema({..});
schema.plugin(ttl, { ttl: 5000 });
Вы можете увидеть все параметры этой библиотеки: https://www.npmjs.com/package/mongoose-ttl
Ответ 5
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
let PassWordReSate = new Schema(
{
hex: String,
email: String,
},
{
collection: "PassWordReSate",
timestamps: true,
}
);
PassWordReSate.path("createdAt").index({ expires: 6 });
module.exports = mongoose.model("PassWordReSate", PassWordReSate);