MongoDB createIndex不使集合中的数据过期

我正在尝试在创建帐户1小时后使访客用户过期。我查找了MongoDB数据库以及其他类似问题,并尝试了建议的解决方案,但是它们也没有用。

在数据库中创建来宾用户时(它显示在MongoDB Atlas的guests集合下,因此创建方式没有问题),它不会在30秒后过期。

依赖项v:

  • “猫鼬”:“ ^ 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},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);

不幸的是,两者都没有。

gareth1987 回答:MongoDB createIndex不使集合中的数据过期

文档没有过期,因为您的guestSchema不包含createdAt字段。

  • guestSchema.index( ... )定义是correct way,用于定义TTL索引。索引要求使用createdAt字段,并删除经过createdAt值30秒的文档。

  • 但是,如果document will not expire不包含由TTL索引索引的字段。

尝试将字段createdAt添加到guestSchema,将其定义为创建用户的日期和时间。

本文链接:https://www.f2er.com/3150509.html

大家都在问