gpt4 book ai didi

mongodb 每个文档都有不同的 TTL

转载 作者:行者123 更新时间:2023-12-04 11:59:08 29 4
gpt4 key购买 nike

到目前为止 i know ,目前 mongodb TTL 由 expireAfterSeconds 索引管理,它是为集合中的所有文档设置的。

那么是否有任何内置方法可以将过期设置为单个文档?,谢谢

最佳答案

在每个文档上,您可以设置一个字段 expires并创建以下索引:

db.docs.createIndex( { expires:1 }, {expireAfterSeconds: 0 } );

一旦时间超过过期字段,此集合中的文档将被删除。但是,这可能需要 60 秒,因为运行以删除文档的后台任务每 60 秒运行一次。

不过这里有一个例子......

因此,让我们插入一堆文档,每次添加它们时为每个文档增加 60 秒。

> var expires = new Date(); // Gets the current datetime.
> expires.setSeconds(expires.getSeconds() + 60)
1587812623023
> db.docs.insert({expires})
WriteResult({ "nInserted" : 1 })

> expires.setSeconds(expires.getSeconds() + 60)
1587812683023
> db.docs.insert({expires})
WriteResult({ "nInserted" : 1 })

> expires.setSeconds(expires.getSeconds() + 60)
1587812743023
> db.docs.insert({expires})
WriteResult({ "nInserted" : 1 })

> db.docs.find()
{ "_id" : ObjectId("5ea418de00f07c4d6461090b"), "expires" : ISODate("2020-04-25T11:03:43.023Z") }
{ "_id" : ObjectId("5ea418e300f07c4d6461090c"), "expires" : ISODate("2020-04-25T11:04:43.023Z") }
{ "_id" : ObjectId("5ea418e600f07c4d6461090d"), "expires" : ISODate("2020-04-25T11:05:43.023Z") }

现在,如果我们添加 TTL 索引。

db.docs.createIndex( { expires:1 }, { expireAfterSeconds: 0 } )

然后我们可以每 60 秒监控一次我们的集合并查看每个文档被删除。

> new Date()
ISODate("2020-04-25T11:03:28.278Z")
> db.docs.find()
{ "_id" : ObjectId("5ea418de00f07c4d6461090b"), "expires" : ISODate("2020-04-25T11:03:43.023Z") }
{ "_id" : ObjectId("5ea418e300f07c4d6461090c"), "expires" : ISODate("2020-04-25T11:04:43.023Z") }
{ "_id" : ObjectId("5ea418e600f07c4d6461090d"), "expires" : ISODate("2020-04-25T11:05:43.023Z") }

尚未删除任何内容。

> new Date()
ISODate("2020-04-25T11:04:18.652Z")
> db.docs.find()
{ "_id" : ObjectId("5ea418e300f07c4d6461090c"), "expires" : ISODate("2020-04-25T11:04:43.023Z") }
{ "_id" : ObjectId("5ea418e600f07c4d6461090d"), "expires" : ISODate("2020-04-25T11:05:43.023Z") }

一份文件不见了。

> new Date()
ISODate("2020-04-25T11:05:17.705Z")
> db.docs.find()
{ "_id" : ObjectId("5ea418e600f07c4d6461090d"), "expires" : ISODate("2020-04-25T11:05:43.023Z") }

另一个没了。

> new Date()
ISODate("2020-04-25T11:06:31.390Z")
> db.docs.find()
>

我们的收藏中没有任何文件。

关于mongodb 每个文档都有不同的 TTL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61424043/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com