如何使用Cosmos DB SQL API查询对象数组中包含指定id的文档
Cosmos DB 数组内对象匹配查询正确写法
原查询错误原因
- 字段名
allowed-usrs包含特殊连字符,未使用引号包裹导致语法解析错误 - 直接
SELECT * FROM c IN t.allowed-usrs的语句返回的是数组内匹配的子对象,而非根层级的文档
三种可行的实现方案
方案1:使用ARRAY_CONTAINS(性能最优,推荐)
直接调用Cosmos DB内置数组匹配函数,适合仅需要筛选根文档的场景:
SELECT * FROM t WHERE ARRAY_CONTAINS(t["allowed-usrs"], {"id": "myId"}, true)
说明:函数第三个参数设为true代表开启部分匹配,仅需要数组内对象包含指定的键值对即可判定匹配,不需要完全和数组元素结构一致
方案2:使用JOIN子句
适合需要同时返回匹配的子数组元素的场景,添加DISTINCT避免同一文档多个子元素匹配时返回重复结果:
SELECT DISTINCT t.* FROM t JOIN c IN t["allowed-usrs"] WHERE c.id = "myId"
方案3:使用IN子句(符合官方文档用法)
先通过子查询提取所有子元素的id值,再用IN判定匹配:
SELECT * FROM t WHERE "myId" IN (SELECT c.id FROM c IN t["allowed-usrs"])
内容的提问来源于stack exchange,提问作者Jeppe Christensen
相关产品推荐
相关产品推荐

