我在Azure cosmosDB中有一个集合,在其中我启用了生存时间(TTL)功能,没有默认设置。
根据documentation,我将在此问题中提及,一切看上去都很清晰,但仍然缺少我的东西,因为经过5天,我仍然可以看到TTL为300秒的文档。
在显示收集设置的屏幕截图下方,其中TTL启用且没有默认设置。
根据文档:
自上次修改时间以来,Azure Cosmos DB将在一段时间后自动删除这些项目。生存时间值以秒为单位配置。配置TTL时,系统将根据TTL值自动删除过期项,而无需客户端应用程序明确发出的删除操作。
但这不适用于我的情况,在2019年7月17日,我可以使用300秒(5分钟)的TTL看到超过5天的文档。
{
"ClientEnqueuedUtcTime": "2019-07-12T06:49:53.844",
"ClientDispatchedUtcTime": "2019-07-12T06:49:53.844",
"ServerEnqueuedUtcTime": "2019-07-12T06:49:53.8949771",
"ServerDispatchedUtcTime": "2019-07-12T06:49:54.3659741",
"TTL": 300,
"EventProcessedUtcTime": "2019-07-12T06:49:55.3583521Z",
"PartitionId": 2,
"EventEnqueuedUtcTime": "2019-07-12T06:49:55.25Z",
"id": "4a0edf24-6a86-4a59-f55d-d7dfe47c30fa",
"_rid": "SBk4AJadUE6gAgEAAAAAAA==",
"_self": "dbs/SBk4AA==/colls/SBk4AJadUE4=/docs/SBk4AJadUE6gAgEAAAAAAA==/",
"_etag": "\"00008f1d-0000-0200-0000-5d282d930000\"",
"_attachments": "attachments/",
"_ts": 1562914195
}
更新答案后
我试图以小写形式保存TTL,但是它是自动转换为大写形式的,所以我认为这与预期的TTL密钥不匹配。
我应该做其他尝试吗?
解决方案:
ttl确实区分大小写,您可以将其设置为小写,在我出于某种原因进行的测试中,当我期望ttl较低时,ttl仍然是大写,所以我不正确地进行了处理那是某种保留键。
答案 0 :(得分:1)
如您所见,here是该属性的情况,导致此方法不起作用。
它必须为小写。我刚刚用TTL
和ttl
进行了测试,确实第一个不起作用,但第二个却按文档中所述工作。可能是您的Json序列化器将其强制变为大写。
您可以使用JsonProperty
属性将属性的大小写强制为小写。这是Microsoft文档中的ttl
属性的示例。
// Include a property that serializes to "ttl" in JSON
public class SalesOrder
{
[JsonProperty(PropertyName = "id")]
public string Id { get; set; }
[JsonProperty(PropertyName="cid")]
public string CustomerId { get; set; }
// used to set expiration policy
[JsonProperty(PropertyName = "ttl", NullValueHandling = NullValueHandling.Ignore)]
public int? ttl { get; set; }
//...
}