有没有人能够在 cosmos mongodb 上将 ttl 与日期字段一起使用?

Has anyone been able to use ttl with a date field on cosmos mongodb?

这几天一直在修改 cosmos。它说 TTL 的工作原理与 mongos 相同,但显然不是。它适用于 int32。但它完全无视日期。

作为参考,我在“_ts”字段上设置了索引,并将 expireInSeconds 设置为 -1。然后,我为每个文档提供了自己的 ttl 字段,无论我希望它们保留多长时间。

由于 int 系统确实有效,我继续创建了将未来日期转换为秒的东西,并且工作得很好。所以我的另一个问题是,可以在很远的地方使用 ttl 秒吗?我可能希望文件在一个月后自动过期。这需要很多秒才能即时计算出来。在任何给定时间,此集合中可能还有数千个具有所有不同 ttls 的文档。

虽然 TTL 功能的最终结果是相同的,即数据被自动删除, 它发生的方式和所需的配置在两者和文档中都略有不同 MongoDB 和 CosmosDB 非常清楚地解释了这些步骤。

对于 MongoDB,需要一个索引(保存 BSON 日期类型值或 BSON 日期数组的字段上的 TTL 索引)以促进此功能,并且您有 显式创建它,而在 CosmosDB 中则没有这样的需要。 CosmosDB 在内部跟踪上次更新时间 对于每个集合,然后根据 TTL 秒自动清除它们。 MongoDB 和 CosmosDB 显然 TTL 需要以秒为单位的时间。

对于MongoDB,TTL Purge线程遵循的清除逻辑是这样的(注意这只是为了说明)

//Assuming there is a field called created_at in the collection which is the basis for TTL
// epoch time
var startTime = new Date(1970,0,1);
// end time
var endTime = new Date(Date.now() - expireAfterSeconds*1000);
// remove all collections between start and end. Since this is a range query so for
//efficiency it obviously requires an index - a special one.
db.collection.remove({created_at: { $gt: startTime, $lte: endTime }});

在 CosmosDB 的情况下 - 有一个内部时间戳 属性 _ts 自动与每个集合关联,并且每当集合是 updated.This 时自动更新是用于自动数据清除逻辑的.