是否可以通过调整CosmosDB中的TTL值来触发删除触发器?

时间:2017-11-29 10:32:00

标签: javascript azure azure-cosmosdb

我在Azure门户中使用Script Explorer创建了一个预删除触发器。以下触发器是用JavaScript编写的:

function markReminderAsPastDue() {
var collection = getContext().getCollection();
var request = getContext().getRequest();
var docToCreate = request.getBody();
docToCreate["pastDue"] = true;
docToCreate["id"] = "";
var accepted = collection.createDocument(collection.getSelfLink(),
    docToCreate,
    function (err, documentCreated) {
        if (err) throw new Error('Error' + err.message);
    });
if (!accepted) throw new Error("Document creation not accepted");

}

我为关联集合中的每个文档设置了TTL值。因此,TTL值不等于-1,并且文档在时间到期后自动删除。如果我手动删除文档,则会触发预删除触发器。但是,当由于TTL值而隐式删除文档时,不会触发触发器。我该怎么做才能解决这个问题?是否有可能使触发器触发TTL值?

1 个答案:

答案 0 :(得分:1)

据我所知,Azure Cosmos DB for TTL中没有任何类型的回调机制。 TTL强制执行只是一个后台线程,每秒查询已过期的文档,然后删除它们。

结合您的需求,我建议您只是模仿应用层中的TTL操作,在那里您可以执行任何额外的业务逻辑。

您可以在每个文档中设置更新时间属性,以更新每个修改的更新时间。然后在应用程序层执行轮询机制,并每隔一段时间遍历数据库,以便在更新时间到期时找出数据并删除它们。

为了减轻应用层的压力,您可以将删除数据的操作提供给Cosmos DB Stored Procedure

希望它对你有所帮助。

相关问题