Azure cosmosdb DocumentDB:What';“这是什么意思?”;向上插入“;?

Azure cosmosdb DocumentDB:What';“这是什么意思?”;向上插入“;?,azure-cosmosdb,Azure Cosmosdb,我试图理解API的这一部分,以便以最有效的方式更新文档 鉴于以下情况: “Replace”要求文档已经存在 “Upsert”不要求文档存在,但需要文档ID才能执行更新 这两个命令都不能执行部分文档更新,这意味着我想不出任何情况下我不必首先查询文档,然后更改受影响的属性,然后替换/升级整个文档 如果我总是必须首先查询文档,以避免删除没有传递回upsert/replace的任何属性值,并且我不能进行部分更新,那么upsert和replace的意义何在 我是否缺少这两个命令的预期用例?您已经描述了

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

鉴于以下情况:

  • Replace
    ”要求文档已经存在
  • Upsert
    ”不要求文档存在,但需要文档ID才能执行更新
  • 这两个命令都不能执行部分文档更新,这意味着我想不出任何情况下我不必首先查询文档,然后更改受影响的属性,然后替换/升级整个文档
如果我总是必须首先查询文档,以避免删除没有传递回upsert/replace的任何属性值,并且我不能进行部分更新,那么upsert和replace的意义何在


我是否缺少这两个命令的预期用例?

您已经描述了这两个命令之间的关键区别。如果文档不存在,Upsert将创建一个文档,否则将覆盖它。替换要求文档已经存在,然后覆盖它。使用哪一个是应用程序关心的问题。在某些情况下,您可能希望使用replace,因为如果文档不存在,则会在您的业务逻辑中构成错误。除此之外,它们非常相似


我理解,无法进行部分更新可能会令人沮丧。但是,Cosmos有一个功能强大的服务器端编程模型,它以存储过程的形式存在,您可以用Javascript编写。您可以轻松创建一个存储过程,该存储过程接收部分文档并仅更新或添加那些新的或更改的属性,这些属性将为您提供最终需要的功能。

Oh!你是否碰巧知道任何展示这种技术或讨论相关算法的示例?您是否在考虑“补丁”类型的解决方案?这超出了本问题的范围。如果您投票并接受此选项,然后就编写存储过程以允许对文档进行部分更新提出不同的问题,我可以尝试在这方面帮助您我有一个需要upsert的场景:我正在添加一个“文件”,并始终希望确保“文件夹”存在,因此不必检查它是否已经存在,每次我都会插入一个新文件夹。