我需要更新 CosmosDb 中的文档。
{
firstname: "...",
lastname: "...",...
lastmodified: "2022-01-13T12:06:18.712Z"
}
由于“并发”(即多个并发“更新程序”),只有当我更新的数据比已经保留的数据“更新”(
Upsert
)时,才应该进行更新(或插入,因此data.lastmodified
?) .
实现这一目标的建议方法是什么?
在普通 SQL 中我会选择:
UPDATE address SET ... WHERE address.lastmodified < newdata.lastmodified
或插入重复密钥更新
如果
Upsert
可以指定何时有效更新插入的约束(即 address.lastmodified < newdata.lastmodified
),我会使用这些。但我猜ItemRequestOptions
不是这个意思?
“并发”上下文:更新被发布到服务总线队列中,并且由事件触发的 AzureFunction 处理事件。有可能,相同数据的多个事件最终“同时”出现在队列中,因此“同时”执行
谢谢您的建议
Clemens(ComosDb 等人的新手)
这可以通过使用带有条件更新的部分文档更新来实现。您可以使用 Add 或 Set patch 操作并指定
WHERE address.lastmodified < newdata.lastmodified
的 WHERE 子句来指定是否执行。
有关详细信息,请参阅Azure Cosmos DB 中的部分文档更新
我认为您可以使用 etag 来确保您正在更新文档的最新版本。
了解更多:https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/database-transactions-optimistic-concurrency