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

Azure Cosmos DB SQL API UPDATE statement - don't replace whole document

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

特别是,我希望在不必检索整个文档的情况下更新文档。我有文档的 ID,我知道我想在文档中更新的确切路径。比如我的文档是

{
  "id": "9e576f8b-146f-4e7f-a68f-14ef816e0e50",
  "name": "Fido",
  "weight": 35,
  "breed": "pomeranian",
  "diet": {
    "scoops": 3,
    "timesPerDay": 2
  }
}

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

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

不支持通过 sql 语言或 SQL API.

部分更新文档

人们已经明确表示这是他们想要的功能,因此可以在此处找到对它的高度赞成的请求:https://feedback.azure.com/forums/263030-azure-cosmos-db/suggestions/6693091-be-able-to-do-partial-updates-on-document

微软已经开始着手解决这个问题,所以你唯一能做的就是等待。

要对此进行详细说明,无法在服务器上部分更新 CosmosDb 中的文档,相反,您可以在memory.In 为了从字面上 UPDATE 文件,你将不得不从 CosmosDb 中检索整个文件,更新 property/properties 您需要更新,然后调用 CosmosDb SDK 中的“替换”方法来替换有问题的文档。或者,您也可以使用“Upsert”来检查文档是否已经存在,如果为真则执行 ‘Insert’,如果 false. 则执行“替换”

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

正如 Nick 提到的,Cosmosdb 团队正在研究 partial update.

更新:

CosmosDB 将支持部分更新已正式发布。您可以从 here

阅读更多内容

使用 Robo3T 通过 mongo 数据库命令 update/delete 多条记录。确保您的查询包含分区键。

db.getCollection('ListOfValues').updateMany({type:'PROPOSAL', key:"CITI"},{$set: {"key":"CITIBANK"}})

db.getCollection('ListOfValues').deleteMany({type:'PROPOSAL', key:"CITI"})

自 2021 年 5 月 25 日起,此功能在个人预览版中可用,希望很快会在 GA 中提供。

https://azure.microsoft.com/en-us/updates/partial-document-update-for-azure-cosmos-db-in-private-preview/

您可以使用补丁 API 进行部分更新。 参考:https://docs.microsoft.com/en-us/azure/cosmos-db/partial-document-update