我在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值?
答案 0 :(得分:1)
据我所知,Azure Cosmos DB for TTL中没有任何类型的回调机制。 TTL强制执行只是一个后台线程,每秒查询已过期的文档,然后删除它们。
结合您的需求,我建议您只是模仿应用层中的TTL操作,在那里您可以执行任何额外的业务逻辑。
您可以在每个文档中设置更新时间属性,以更新每个修改的更新时间。然后在应用程序层执行轮询机制,并每隔一段时间遍历数据库,以便在更新时间到期时找出数据并删除它们。
为了减轻应用层的压力,您可以将删除数据的操作提供给Cosmos DB Stored Procedure。
希望它对你有所帮助。