我们已经决定在某些情况下从Azure表存储(ATS)转移到CosmosDB。我试图弄清楚,如何在CosmosDB SQL API中模仿ATSInsertOrMerge
操作。使用UpsertItemAsync
实际替换项目(如果找到)。
为了说明这个问题,让我们假设app1在CosmosDB中创建了一个包含3个非空字段的项。App2想要更新项目,但是有一个包含2个非空字段的项目(例如,其中一个字段是id以匹配前一个记录)。来自ATS的InsertOrMerge
将产生2个新的非空字段,其余字段将来自app1项(非空)字段。来自Cosmos的UpsertItemAsync
将简单地替换项目(丢失第三个字段)。
当然,这可以通过首先获取项目,将其与新对象合并并替换新项目来完成,但这意味着还要进行一次调用。有没有一种方法可以做到这一点,而不需要首先检索项目?
在Cosmos DB中有一个Partial Document Update
功能,但是目前还在私有预览中(在回答这个问题的时候)。
您可以了解更多关于此功能以及如何启用此功能的帐户,请参阅此链接:https://github.com/AzureCosmosDB/PatchPrivatePreviewFeedbackGroup。
我将此添加为指定方法和样本的另一个答案。
正如@Gaurav
所提到的,这是您可以利用Cosmosdb的部分文档更新补丁API特性的地方。您要查找的是Replace方法
cosmosPatchOperations.replace("/taskNum", newTaskNum);
也可以使用条件补丁操作命令来替换属性。