无法使用 TTL 索引使 MongoDB 文档过期

用户7903579

在我的 Node.js 应用程序中,我试图将 TTL 索引添加到 MongoDB 集合中的日期字段,以使其在指定日期过期。

应用程序通过 获取当前日期new Date(),通过getTime()方法将其转换为毫秒,加上用户指定的毫秒数(到期时间),并通过 将结果转换回日期格式setTime()结果将保存到以expireAtJSON 对象命名的字段中,该对象最终会插入到 MongoDB 集合中。

结果看起来不错,因为它准确地表示了根据 UTC 时区调整到添加到当前日期的到期时间的日期。例如:expireAt: "2017-05-14T13:59:01.998Z",它在大约 13:00 UTC 插入,过期时间为 1 小时。

为了添加 TTL 索引,我在 Node 应用程序中添加了以下行:

collection.createIndex({"expireAt": 1}, {expireAfterSeconds: 0, name: "_exp"});

然而,这给了我一个MongoError: Values in the index key pattern cannot be 0错误并且没有创建索引,所以我切换到:

collection.createIndex({"expireAt": 1}, {expireAfterSeconds: 1, name: "_exp"});

这一次,当我运行它时创建了索引,正如我使用 MongoDB Compass 所看到的

然后我继续插入带有expireAt字段的文档,例如上面用expireAt: "2017-05-14T13:59:01.998Z". 然而,距离文档应该过期已经快一个小时了,但它没有。此外,上图显示 TTL 索引的使用率为 0,这表明由于某种原因,插入的新文档尽管具有该expireAt字段,但并未使用该索引

此外,MongoDB 指南针将expireAt字段的内容显示为字符串类型,而不是特定的 BSON 日期类型。但是,我不确定这是否只是 Compass 的事情,因为它不允许我将字段类型编辑为字符串、对象或数组以外的任何内容。

有什么我可能会遗漏的吗,或者有没有人遇到过类似的问题并找到了灵魂?我试图在类似问题中寻找解决方案,但没有成功。

苏克鲁阿拉塔斯

似乎问题与字段类型有关。TTL 索引字段必须是日期类型。https://docs.mongodb.com/manual/core/index-ttl/

如果文档中的索引字段不是日期或保存日期值的数组,则文档不会过期。

您应该考虑使用新Date对象创建文档

"expireAt" : new Date("2017-05-14T13:59:01.998Z")

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Mongodb TTL使文档提前过期

来自分类Dev

MongoDB中是否有TTL索引的替代方案,不会永久删除文档?

来自分类Dev

mongodb TTL不删除文档

来自分类Dev

过期的带TTL索引的mongo数据和数据恢复

来自分类Dev

嵌套文档上的MongoDb TTL是否可以?

来自分类Dev

MongoDB 文档过早过期 (mongoose)

来自分类Dev

如何更改TTL索引的mongodb默认清除时间?

来自分类Dev

我应该何时在MongoDB中设置TTL索引?

来自分类Dev

我应该何时在MongoDB中设置TTL索引?

来自分类Dev

在mongodb 3.0(.Net驱动程序2.0)中使用TTL到期的文档

来自分类Dev

创建MGO TTL索引以有选择地删除文档

来自分类Dev

MongoDB是否使用索引组合来缩小要扫描的文档?

来自分类Dev

MongoDB:使用索引更新数组中的子文档

来自分类Dev

MongoDB:使用索引更新数组中的子文档

来自分类Dev

根据条件使mongoDB中的索引过期

来自分类Dev

MongoDB中的子文档索引

来自分类Dev

在MongoDB中获取今天之前过期的文档

来自分类Dev

在MongoDB上过期时自动删除文档

来自分类Dev

Mongo 部分 AND TTL 索引

来自分类Dev

使用ElasticSearch索引mongoDB

来自分类Dev

mongodb使用什么索引?

来自分类Dev

如何为存储为数组 [ticks,offset] 的 DatetimeOffset 创建 MongoDB TTL 索引?

来自分类Dev

无法在已经具有索引的字段上创建TTL索引。...真的?

来自分类Dev

基于路径的文档排序的MongoDB索引策略

来自分类Dev

Solr中如何计算“生存时间”(TTL)中文档的过期字段值?

来自分类Dev

在整个索引上启用TTL

来自分类Dev

Cassandra由于TTL过期而超时

来自分类Dev

TTL在运输途中过期

来自分类Dev

无法使用稀疏的mongodb创建唯一索引

Related 相关文章

热门标签

归档