我可以为 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
更新为 1,其中 ID 为 "9e576f8b-146f-4e7f-a68f-14ef816e0e50"
。我可以使用 Azure SQL API 执行此操作而不完全替换文档吗?
Cosmos DB SQL 语言仅支持
Select
语句。
不支持通过 sql 语言或 SQL API 部分更新文档。
人们已经明确表示这是他们想要的功能,因此可以在这里找到对此的高度支持的请求:https://feedback.azure.com/forums/263030-azure-cosmos-db/suggestions/ 6693091-能够对文档进行部分更新
微软已经开始着手解决这个问题,所以你唯一能做的就是等待。
要详细说明这一点,不可能在服务器上部分更新
CosmosDb
中的文档,相反,您可以在内存中执行任何您需要执行的操作。为了从字面上 UPDATE
文档,您必须从 CosmosDb 检索整个文档,更新您需要更新的 property/properties
,然后调用 CosmosDb SDK 中的“替换”方法来替换有问题的文档。或者,您也可以使用“Upsert”来检查文档是否已存在,如果为 true 则执行 ‘Insert’
,如果 false.
则执行“替换”
注意: 在提交更新之前,请确保您拥有最新版本的文档!
更新:
CosmosDB 对部分更新的支持已正式发布。您可以从这里
阅读更多内容自 2021 年 5 月 25 日起,此功能可在私人预览版中使用,并有望很快推出 GA。
您可以使用Patch API进行部分更新。 请参阅:https://learn.microsoft.com/en-us/azure/cosmos-db/partial-document-update
我知道自提出原始问题以来已经有一段时间了,但此条目是主要搜索结果。
我们现在可以使用以下操作来仅更新部分记录。
Container.PatchItemAsync
使用 Robo3T 通过 mongo db 命令更新/删除多条记录。确保您的查询包含分区键。
db.getCollection('ListOfValues').updateMany({type:'PROPOSAL', key:"CITI"},{$set: {"key":"CITIBANK"}})
db.getCollection('ListOfValues').deleteMany({type:'PROPOSAL', key:"CITI"})