当前位置: 首页 > 知识库问答 >
问题:

在Azure Cosmos DB中进行Upsert前读取

白哲茂
2023-03-14

我很困惑 Azure Cosmos DB “UpsertDocumentAsync” C# API 的工作原理。看起来对象已更新(如果首次读取它):

var response = await client.ReadDocumentAsync(UriFactory.CreateDocumentUri(databaseId, collectionId, "docId"), new RequestOptions { PartitionKey = new PartitionKey("pk") });
var upsertOrder = response.Resource;
var upsertOrder = new Measurements { Id = "docId" , value = 3243};
upsertOrder.SetPropertyValue("value", 5678);
response = await client.UpsertDocumentAsync(collectionLink, upsertOrder);

如果我直接创建一个对象:

 var upsertOrder = new Measurements { Id = "docId" , value = 3243};
 response = await client.UpsertDocumentAsync(collectionLink, upsertOrder);

这创建了一个新对象!!我真的必须在打补丁之前阅读文档吗??

编辑我知道我也需要添加partitionKey。因此,它不再创建新对象,而是将所有未传递字段设置为NULL。这不是补丁行为!那么,我是否需要通过所有字段?

非常感谢这里的遮光灯。

共有1个答案

王宏深
2023-03-14

https://feedback.azure.com/forums/263030-azure-cosmos-db/suggestions/6693091-be-able-to-do-partial-updates-on-document

如您所见,该功能已计划好,但仅在2018年3月5日收到反馈,因此可能需要一段时间才能交付。

目前,您可以读取文档,更新文档,然后按照您所述插入文档-部分原因是文档大小是一个重要的设计选择,或者您也可以编写一个存储过程来执行此操作,并使用它进行部分更新。

 类似资料:
  • 问题内容: PostgreSQL 9.5的upsert的正确语法,下面的查询显示错误,为什么? 我尝试更改为 然后显示错误,但是 我不想将gallery_id或category_id设置为唯一, 因为我想确保两列都相同然后进行更新.... 如何正确地在postgres 9.5中进行upsert? 如果需要唯一列,我应该使用其他方法,怎么办? 我想确保多列都冲突然后进行更新,正确的用法是什么 表(c

  • 问题内容: 这里一个非常常见的问题是如何进行,这是MySQL调用的内容,并且该标准支持该MERGE操作。 鉴于PostgreSQL不直接支持它(在9.5页之前),您如何做到这一点?考虑以下: 现在,假设你想“UPSERT”的元组(2, ‘Joe’),(3, ‘Alan’),因此新表的内容是: 那就是人们在讨论时谈论的话题upsert。至关重要的是,在存在多个事务处理同一个表的情况下,任何方法都必须

  • 使用postgresql 9.5,查询显示错误,为什么? 我试着改变

  • 问题内容: 我使用模块启动一个子流程并连接到它的输出流()。我希望能够在它的标准输出上执行非阻塞读取。在调用之前,是否有方法使不阻塞或检查流中是否有数据?我希望它是可移植的,或者至少在和下工作。 这是我目前的操作方式(如果没有可用数据,则会阻塞): 问题答案: ,,不会在这种情况下帮助。 不管使用什么操作系统,一种可靠的读取流而不阻塞的方法是使用:

  • Mongo在upserts上返回WriteResult: 有什么办法可以从pymongo访问这些字段吗?我需要这个,因为更新总是在pymongo中不返回任何内容,我想知道我正在查询的文档是否被修改,或者即使它存在而不进行其他查询。你能告诉我如何做到这一点吗? 我知道以前有人问过这个问题,但那是几年前的事了,我在谷歌上找到的所有东西都没有一个例子。 既然这样,有没有办法从upsert的结果中获取文档

  • 问题内容: 我不想使用它,因为它基本上是a ,并且使用旧列中的数据很复杂。 有点骇人听闻,因为所有错误都会被忽略,因此这不是一种选择。 我已经阅读了一篇使用以下内容的博客文章 我喜欢这种方法真的很多,但我不知道我怎样才能实现这个用在SQLite的,这是我得到了什么: 在似乎是使用的唯一方法在SQLite的,因为一切抛出一个语法错误。但是在中也不能使用-或-语句,因此会引发错误。 我尝试了以下 但这