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

标签 javascript azure azure-cosmosdb

我已使用 Azure 门户中的脚本资源管理器创建了预删除触发器。下面的触发器是用 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 值触发触发器?

最佳答案

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

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

您可以在每个文档中设置更新时间属性,该属性会更新每次修改的更新时间。然后在你的应用层做一个轮询机制,每隔一段时间就迭代一下数据库,找出更新时间到期的数据,然后删除。

为了减轻您应用层的压力,您可以将删除数据的 Action 交给Cosmos DB Stored Procedure .

希望对您有帮助。

关于javascript - 是否可以通过调整 CosmosDB 中的 TTL 值来触发删除触发器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47550617/

相关文章:

javascript - AJAX只保存输入的第一个字母

javascript - 循环中页面对象的范围丢失

c# - 无法通过 Azure AD B2C 属性中的 Graph API 创建用户不存在

Azure 搜索,跳过大 blob 但仍索引元数据

c# - 在单个查询中从 CosmosDb 中获取多种类型的实体

JavaScript: "Uncaught SyntaxError: Unexpected token {"

javascript - 表单未通过 Ajax 提交 "Submit"输入

azure - 如何更改 Azure 静态 Web 应用中工作流的 yml 文件?

node.js - VM 上的 Cosmos DB 模拟器和主机 MacOS 上的 Azure Function App 未通过 SSL 验证

azure - 嵌套 Java 对象/Json 的 CosmosDb 分区键 (Spring Boot)