在数字数据类型上创建 TTL 索引

在数字数据类型上创建 TTL 索引

我正在尝试创建 TTL 索引以删除以下示例文档“生成”字段中超过 30 分钟的文档

示例文档:{“_id”:ObjectId(“5850308c077b3d1ccc11cef0”),“generated”:NumberLong(“1481650316760”)}

问题 1)是否可以这样做,因为“生成”字段不是日期类型 2)是否有其他方法可以在不修改文档结构的情况下实现此目的

答案1

是否可以这样做,因为“生成”字段不是日期类型

与 MongoDB 3.4 一样,TTL 索引仅支持具有 BSON 日期值的字段:

If the indexed field in a document is not a date or an array that holds
date values, the document will not expire.

有没有其他方法可以实现这一点而无需修改文档结构

如果您希望支持基于字段类型或内置 TTL 索引所提供内容之外的比较的文档过期,您可以随时编写自己的脚本并使用类似cron公用事业(Linux/Unix 操作系统)或任务计划程序(视窗)。

在这种情况下,您的脚本将删除generatedNumberLong 值早于所需到期截止时间(例如 30 分钟)的所有文档。shell 中的查询mongo类似于:

db.collection.remove(
    {
        generated: {
            // Expire documents older than half hour: 30 minutes * 60 seconds * 1000 ms
            $lt: (Date.now() - (30 * 60 * 1000))
        }
    }
)

你可以用你最喜欢的应用程序语言编写它,将其作为.js文件传递给shell,或者使用mongo向 shell 传递 JavaScript 代码。有关更多信息,请参阅mongo--eval为 mongo Shell 编写脚本在 MongoDB 手册中。

相关内容