我如何使用collection.update在mongodb上使用ttl(生存时间)?

时间:2018-01-01 10:42:30

标签: javascript node.js mongodb

我想在数据库中过期数据(使用expireAfterSeconds确定),但我想使用collection.update>>数据总是实时向数据库发送数据,因此TTL必须处理更新数据..我可以这样做吗?

这是我用于在使用ttl指定时间后从mongodb删除数据的代码。

[isort]
...
known_first_party = my_module

1 个答案:

答案 0 :(得分:0)

来自TTL Index manual

  

要创建TTL索引,请对值为日期或包含日期值的数组的字段使用db.collection.createIndex()方法和expireAfterSeconds选项。

但是,您的索引创建使用email,我假设它不包含任何日期:

  

... ensureIndex({“email”:1},{expireAfterSeconds:time,unique:true})

相反,你需要使用createdAt字段来使TTL索引工作,我假设它包含文档的创建时间:

...createIndex({ "createdAt": 1 }, { expireAfterSeconds: time })

此外,您不希望索引上有unique: true约束。否则,数据库将不允许在同一时间插入两个文档。

有关更多示例,请参阅Expire Data from Collections by Setting TTL

请注意ensureIndex()是一个古老的MongoDB习语,而且是deprecated since MongoDB 3.0。请改用db.collection.createIndex()