CosmosDB SQL API 插入或合并

CosmosDB SQL API Insert or Merge

我们决定在某些情况下从 Azure Table 存储 (ATS) 迁移到 CosmosDB。我想弄清楚如何在 CosmosDB SQL API 中模仿 ATS InsertOrMerge 操作。使用 UpsertItemAsync 实际上替换了该项目(如果找到)。

为了说明问题,我们假设 app1 在 CosmosDB 中创建了一个包含 3 个非空字段的项目。 app2 想要更新该项目,但有一个项目有 2 个非空字段(例如,其中一个是 id 以匹配以前的记录)。来自 ATS 的 InsertOrMerge 将导致 2 个新的非空字段,其余字段将来自 app1 项目(非空)字段。来自 Cosmos 的 UpsertItemAsync 将简单地替换该项目(丢失第三个字段)。

当然,这可以通过先获取项目,将其与新对象合并并替换新项目来完成,但这意味着需要多调用一次。有没有办法在不先检索项目的情况下执行此操作?

Cosmos DB 中有一个 Partial Document Update 功能,但目前处于私人预览阶段(在回答这个问题时)。

您可以详细了解此功能以及如何为您的帐户启用此功能,请参阅此 link:https://github.com/AzureCosmosDB/PatchPrivatePreviewFeedbackGroup

我将此添加为指定方法和样本的另一个答案。

@Gaurav 所述,您可以在此处利用 Cosmosdb 的 Partial Document Update Patch API 功能。您正在寻找的是 Replace 方法

cosmosPatchOperations.replace("/taskNum", newTaskNum);

您也可以使用条件补丁操作命令来替换属性。