Подтвердить что ты не робот

Установка времени истечения для коллекции в монгодбе с использованием мангуста

Ниже приведена команда, которая может использоваться через терминал mongo для установки времени истечения для коллекций (TTL):

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

Как это сделать из моего кода в Node.js с помощью mongoose?

4b9b3361

Ответ 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);