Azure cosmosdb UpsertItemAsync在.NET Cosmos DB客户端中做什么?

Azure cosmosdb UpsertItemAsync在.NET Cosmos DB客户端中做什么?,azure-cosmosdb,Azure Cosmosdb,此问题与Microsoft.Azure.Cosmos v3.11.0有关 UpsertItemAsync的未指定“upsert”操作的确切语义。特别是,它是插入+替换还是插入+部分更新?(我怀疑前者,因为它至今仍处于打开状态。)CreateItemAsync将创建一个新项目,但如果已经存在具有相同ID的项目,则将失败 ReplaceItemAsync将替换具有相同ID的现有项,但如果该项不存在,则将失败 UpsertItemAsync组合了上述两个操作,因此它将创建或替换具有指定ID的任何项。因

此问题与Microsoft.Azure.Cosmos v3.11.0有关


UpsertItemAsync
的未指定“upsert”操作的确切语义。特别是,它是插入+替换还是插入+部分更新?(我怀疑前者,因为它至今仍处于打开状态。)

CreateItemAsync
将创建一个新项目,但如果已经存在具有相同ID的项目,则将失败

ReplaceItemAsync
将替换具有相同ID的现有项,但如果该项不存在,则将失败

UpsertItemAsync
组合了上述两个操作,因此它将创建或替换具有指定ID的任何项。因此它不是“插入+替换”。相反,这是一个错误


据我所知,Cosmos不支持“部分更新”。

仅添加注释,文档的标识是ID+分区键值(不仅仅是ID)。如何获取项目的ID。这是否意味着我们必须获取该项目的ID,然后进行升级?@saikumar:我在回答中提到的三种方法都在一个文档上运行。您必须提供ID来标识要操作的文档(这几乎是一种重复)。如果您必须执行查询(类似于
select*fromcontainer c,其中c.userName='saikumar'
)来获取ID,那么是的,您必须通过查询项目来获取项目的ID。