MongoDB createIndex не истекает данные из коллекции - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь истечь гостевые пользователи после 1 часа создания учетной записи. Я просмотрел базу данных MongoDB, а также другие подобные вопросы и попробовал предлагаемые решения, но они также не работали.

Когда гостевой пользователь создается в базе данных (он отображается под коллекцией guests в MongoDB Atlas, поэтому проблем с его созданием нет), срок его действия не истекает через 30 секунд.

Зависимости v:

  • "mongoose": "^ 5.7.8",
  • "узел": "10.16.3"

Это user.js, где я сохраняю пользователя в базе данных, с ним нет проблем:

router.post("/guest", function (req, res, next) {
    let guest = new Guest({
        email: req.body.email
    });

    guest.save(function (err) {
    });

    res.redirect('back');
});

Вот что я пробовал:

let mongoose = require('mongoose');
let Schema = mongoose.Schema;

let guestSchema = new Schema({
    email: { type: String, required: true }
});

guestSchema.index({createdAt: 1},{expireAfterSeconds: 30});
module.exports = mongoose.model('guest', guestSchema);

Итак, ятакже пробовал это:

let mongoose = require('mongoose');
let Schema = mongoose.Schema;

let guestSchema = new Schema({
    email: { type: String, required: true }
});

guestSchema.createIndex({createdAt: 1},{expireAfterSeconds: 30});
module.exports = mongoose.model('guest', guestSchema);

, что приводит к ошибке createIndex is not a function.

Я также пробовал это:

let mongoose = require('mongoose');
let Schema = mongoose.Schema;

let guestSchema = new Schema({
    email: { type: String, required: true }
    expire: { type: Date, index: { expireAfterSeconds: 30 } }
});
module.exports = mongoose.model('guest', guestSchema);

К сожалению, ни один не работал.

1 Ответ

1 голос
/ 06 ноября 2019

Срок действия документов не истек, поскольку ваш guestSchema не содержит поля createdAt.

  • Определение guestSchema.index( ... ) - это правильный способ для определения индекса TTL. Индекс говорит об использовании поля createdAt и об удалении документов, которые за 30 секунд прошли значение createdAt.

  • Однако срок действия документа не истечет , если он не содержит поле, индексированное индексом TTL.

Попробуйте добавить поле createdAt в guestSchema, указав в нем дату и время создания пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...