You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 08:15:04