Azure Cosmos DB SQL API UPDATE 语句 - 不要替换整个文档

Sco*_*y H 10 azure azure-cosmosdb azure-cosmosdb-sqlapi

我可以UPDATE为 Azure Cosmos DB编写语句吗?SQL API 支持查询,但更新呢?

特别是,我希望更新文档而不必检索整个文档。我有文档的 ID,我知道我想在文档中更新的确切路径。例如,假设我的文档是

{
  "id": "9e576f8b-146f-4e7f-a68f-14ef816e0e50",
  "name": "Fido",
  "weight": 35,
  "breed": "pomeranian",
  "diet": {
    "scoops": 3,
    "timesPerDay": 2
  }
}
Run Code Online (Sandbox Code Playgroud)

我想更新diet.timesPerDay到 ID 所在的 1 "9e576f8b-146f-4e7f-a68f-14ef816e0e50"。我可以在不完全替换文档的情况下使用 Azure SQL API 做到这一点吗?

Nic*_*sas 12

Cosmos DB SQL 语言仅支持Select语句。

不支持通过 sql 语言或 SQL API 部分更新文档。

人们已经明确表示这是他们想要的功能,因此可以在此处找到一个高度赞成的请求:https ://feedback.azure.com/forums/263030-azure-cosmos-db/suggestions/6693091-能够对文档进行部分更新

微软已经开始着手这方面的工作,所以你唯一能做的就是等待。

  • 从 2021 年 11 月开始,现在可以使用 .NET、Java 和 Node SDK 以及存储过程进行部分文档更新。 (6认同)

Saj*_*ran 8

CosmosDb为了详细说明这一点,在服务器上部分更新文档是不可能的,相反,您可以在内存中执行任何您需要执行的操作。为了从字面上UPDATE更新文档,您将必须检索从 CosmosDb 中获取整个文档,更新property/properties您需要更新的文档,然后调用 CosmosDb SDK 中的 \xe2\x80\x98Replace\xe2\x80\x99 方法来替换有问题的文档。或者,您也可以使用 \xe2\x80\x98Upsert\xe2\x80\x99 来检查文档是否已存在并执行\xe2\x80\x98Insert\xe2\x80\x99if true 或 \xe2\x80\x98Replace\xe2\x80\x99 iffalse.

\n

注意:在提交更新之前,请确保您拥有该文档的最新版本!

\n

更新 :

\n

CosmosDB 对部分更新的支持已正式发布。您可以从 这里阅读更多内容

\n

  • “正在工作”可能不是最准确的状态,已经过去了 1 年零 7 个月了,仍然没有任何进展 (2认同)

小智 0

您可以使用 Patch API 进行部分更新。请参阅:https ://learn.microsoft.com/en-us/azure/cosmos-db/partial-document-update