在Cosmos DB中无需索引,能否通过部分文档更新替换数组指定元素?
Cosmos DB 部分文档更新:无索引替换数组元素的可行性
结论:不行,目前Cosmos DB的部分文档更新功能无法在不知道元素索引的前提下,直接通过属性匹配(如name="B")替换数组中的目标元素。
原因
Cosmos DB的部分更新(PATCH操作)依赖明确的路径定位,针对数组元素的更新必须指定具体的索引路径(比如/elements/1),没有内置语法支持通过条件筛选数组元素并直接替换。
替代方案
先查索引再更新
先执行查询获取目标元素的索引:SELECT VALUE indexOf(c.elements, e) FROM c JOIN e IN c.elements WHERE e.name = "B"拿到索引后,再用PATCH操作替换该位置的元素,示例请求(REST API格式):
PATCH https://<account-name>.documents.azure.com/dbs/<db-id>/colls/<coll-id>/docs/<doc-id> Headers: x-ms-documentdb-partitionkey: <partition-key>, Content-Type: application/json-patch+json Body: [ { "op": "replace", "path": "/elements/1", "value": {"name": "B", "value": 10} } ]调整数据结构
如果业务允许,将数组改为键值对对象结构:{ "elements": { "A": {"value": 5}, "B": {"value": 3}, "C": {"value": 8} } }这样可以直接通过
/elements/B路径执行部分更新,无需依赖索引。
内容的提问来源于stack exchange,提问作者Tom Bosmans
相关产品推荐
相关产品推荐

