如何使用Cosmos DB Partial Document Update更新数组子对象属性
Cosmos DB 部分文档更新实现方案
场景1:已知Items数组中Id=2的元素固定位于索引1位置(数组从0开始计数)
你可以直接指定数组索引路径执行替换操作,通用REST API请求格式如下:
- 请求方法:
PATCH - 请求头必须指定:
Content-Type: application/json-patch+json - 请求Body内容:
[ { "op": "replace", "path": "/Items/1/ProductCode", "value": "A-111" } ]
C# SDK 示例代码(要求Microsoft.Azure.Cosmos SDK v3.23.0及以上版本):
var container = cosmosClient.GetContainer("你的数据库名", "你的容器名"); var patchOperations = new List<PatchOperation> { PatchOperation.Replace("/Items/1/ProductCode", "A-111") }; // 替换为当前文档对应的分区键值 var response = await container.PatchItemAsync<object>( id: "SalesOrder2", partitionKey: new PartitionKey("Account2"), patchOperations: patchOperations);
场景2:数组元素顺序不固定,无法确定Id=2的索引位置
可以使用Cosmos DB Patch内置的数组条件筛选语法,直接匹配数组中Id=2的元素执行更新,不需要提前查询文档获取索引:
REST API请求Body调整为:
[ { "op": "replace", "path": "/Items/?Id=2/ProductCode", "value": "A-111" } ]
对应C# SDK代码仅需要修改PatchOperation的路径参数即可:
var patchOperations = new List<PatchOperation> { PatchOperation.Replace("/Items/?Id=2/ProductCode", "A-111") };
注意事项
- 执行Patch操作必须传入目标文档对应的正确分区键值,否则会操作失败
- 数组条件筛选语法属于Cosmos DB Patch正式支持的特性,目前已在所有公共区域全量开放
- 其他语言SDK的实现逻辑一致,仅需要按照对应语言的语法构造PatchOperation,路径规则和上述示例完全相同
内容的提问来源于stack exchange,提问作者Pietv
相关产品推荐
相关产品推荐

