DocumentDB:“Upsert”有什么意义?

时间:2017-07-26 21:12:59

标签: azure-cosmosdb

我正在尝试理解API的这一部分,以便以最有效的方式更新文档。

鉴于以下内容:

  • Replace”要求文档已存在
  • Upsert”不要求文档存在,但如果要进行更新则需要文档ID。
  • 这两个命令都不能进行部分文档更新,这意味着我无法想到任何我不必先查询文档,然后更改受影响的属性,然后替换/ upsert整个文档的场景。

如果我总是要首先查询文档以避免擦除任何未传递回upsert / replace的属性值,并且我不能进行部分更新,那么两者都有什么意义upsert和replace?

我是否错过了这两个命令的预期用例?

1 个答案:

答案 0 :(得分:8)

您已经描述了两者之间的主要差异。如果文档尚不存在,Upsert将创建一个文档,否则将覆盖它。替换要求文档已存在,然后覆盖它。使用哪个是您的应用程序的关注点。在某些情况下,您可能希望使用替换,因为如果文档尚不存在,则会在业务逻辑中构成错误。否则它们非常相似。

据我所知,缺乏部分更新可能会令人沮丧。但是,Cosmos以存储过程的形式提供了一个功能强大的服务器端编程模型,您可以使用Javascript编写。您可以轻松创建一个接收部分文档的SPROC,并仅更新或添加新的或更改的属性,这些属性将为您提供最终要查找的功能。