javascript - 如何在 Mongoose 中设置文档创建的 TTL 日期?

标签 javascript node.js mongodb mongoose

我正在尝试在 Mongoose 中创建一个 promoCode 模式。创建时,我需要能够设置促销代码的到期日期。促销代码不一定具有相同的 TTL。我看了this question ,但我的文件还没有过期。

这是我的 promoCode.js 文件:

var mongoose = require("mongoose");
var promoCodeSchema = mongoose.Schema({
    expirationDate: Date,
    createdAt: {
        type: Date,
        expireAfterSeconds: Number,
        default: Date.now
    }
})
module.exports = mongoose.model("Promo", promoCodeSchema);

现在,在 routes.js 中,我有:

app.post("/admin/promo/create", isLoggedIn, isVerified, isAdmin, function (req, res) {
    var promo = new Promo();
    promo.createdAt.expireAfterSeconds = 60;
    // for reference, note the actual day on which the promo code should expire
    var days = parseInt(req.body.expiration.replace(/[^\d]+/g, "")) || 1;
    promo.expirationDate = new Date(Date.now() + (days * 24 * 3600 * 1000));

    promo.save(function (err) {
        console.log(err, promo);
        return res.redirect("/admin/promo");
    });
})

这行不通。我还需要能够获取 TTL 的值。我将如何解决这个问题?

最佳答案

当您想为每个文档使用不同的 TTL 值时,您可以在包含到期时间戳的字段上使用 0 的 expires 时间(如 here 所述),然后设置该时间戳以反射(reflect)每个文档所需的 TTL。

您已经在您的架构中计算了 expirationDate,因此您希望将 TTL 索引放在该字段而不是 createdDate 上。但是您需要在定义中使用 expires,而不是像您正在使用的 expiresAtSeconds:

var promoCodeSchema = mongoose.Schema({
    expirationDate: {
        type: Date,
        expires: 0
    },
    createdAt: {
        type: Date,
        default: Date.now
    }
});

然后在 routes.js 中,您只需将新的 Promo 文档上的 expirationDate 设置为其到期时间戳(就像您已经在做了)。

关于javascript - 如何在 Mongoose 中设置文档创建的 TTL 日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24275117/

相关文章:

javascript - 表中的树状连接器(HTML/CSS/原型(prototype))

javascript - 性能测试给出无效结果

javascript - 使用 Zombie.js 查询 Backbone.js 应用程序的 DOM

javascript - 使用 Node 和 Angular 创建新应用程序以进行自动登录 --- 需要见解

java mongodb - 获取数组长度而不下载所有数据

javascript - 如何将图像上传到包含 blob :http link using PHP and JavaScript? 的文件夹

node.js - Mongoose:用投影填充对象的嵌套数组

javascript - MongoDB 更新对象

C# MongoDB Driver 2.0 将 "strict mode"Json 转换为 "mongo shell mode"BsonDocument

javascript - 如何使具有大型 cytoscape.js 网络的页面更具响应性