【问题标题】:MongoDB createIndex not expiring data from collectionMongoDB createIndex 不会使集合中的数据过期
【发布时间】:2019-11-07 02:24:13
【问题描述】:

我正在尝试在帐户创建 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},{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);

不幸的是,两者都不起作用。

【问题讨论】:

    标签: node.js mongodb express mongoose


    【解决方案1】:

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

    • guestSchema.index( ... ) 定义是 correct way 定义 TTL 索引。该索引表示使用 createdAt 字段,并删除 30 秒通过 createdAt 值的文档。

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

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

    【讨论】:

    • 我将createdAt: Date 添加到我的guestSchemacreatedAt: Date.now() 到我创建访客的访客路线中。有效!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多