gpt4 book ai didi

mongodb - 同一集合中的不同文档的不同 TTL?

转载 作者:IT老高 更新时间:2023-10-28 13:33:20 25 4
gpt4 key购买 nike

我正在为我的 session 使用 AdministratorSession 集合。当他单击“记住我”时,我希望在 3600 分钟后删除 session 文档,否则为 30 分钟。可能吗?如果不是,那我有什么选择?

我在这里尝试使用简单的方法,但它会创建索引并将 TTL 值设置为创建的第一个文档。例如,如果一个文档 ttl 设置为 30 和 3600 旁边,它们都将在 30 分钟后被删除。

这是我目前完成此任务的方法。

public AdministratorSession Add(string ip, bool remember)
{
var random = new Random();

var session = new AdministratorSession
{
StartDateTime = DateTime.Now,
Hash = EncryptionService.Sha256(DateTime.Now.Ticks.ToString(CultureInfo.InvariantCulture)),
Salt = EncryptionService.Md5(ip + random.Next(0, 1000))
};

var db = DbContext.GetDatabase();
var collection = db.GetCollection<AdministratorSession>("AdministratorSession");

collection.EnsureIndex(IndexKeys.Ascending("StartDateTime"), IndexOptions.SetTimeToLive(TimeSpan.FromMinutes(remember ? 36000 : 30)));
collection.Insert(session);

return session;
}

最佳答案

MongoDB 的 TTL 算法通过将索引日期字段与当前日期减去 TTL 索引的时间进行比较,并在文档较小时删除文档 (if document.date < (now() - TTLduration)) delete(document);)。

除了将日期字段设置为当前时间,将 TTL 时间设置为删除前多长时间,您还可以使用相反的机制:将 TTL 时间设置为 0,将日期字段设置为您希望删除文档的日期

关于mongodb - 同一集合中的不同文档的不同 TTL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20934184/

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