在 CosmosDb 中更新插入文档,但前提是“较新”

问题描述 投票:0回答:2

我需要更新 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 等人的新手)

concurrency azure-cosmosdb upsert
2个回答
1
投票

这可以通过使用带有条件更新的部分文档更新来实现。您可以使用 Add 或 Set patch 操作并指定

WHERE address.lastmodified < newdata.lastmodified
的 WHERE 子句来指定是否执行。

有关详细信息,请参阅Azure Cosmos DB 中的部分文档更新


0
投票

我认为您可以使用 etag 来确保您正在更新文档的最新版本。

了解更多:https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/database-transactions-optimistic-concurrency

© www.soinside.com 2019 - 2024. All rights reserved.