CosmosDB中数组与非数组混合的Records字段用JOIN查询缺漏数据如何解决
Cosmos DB混合类型Records字段查询解决方案
问题原因
Cosmos DB的JOIN操作仅支持对数组类型的字段做迭代遍历,当Records为单对象结构时,无法被识别为可迭代集合,因此对应数据不会被返回。
修复方案
在JOIN操作前对Records字段做类型统一处理:通过IS_ARRAY()函数判断字段类型,非数组类型的统一包装为单元素数组,数组类型直接复用即可。
对应查询语句
SELECT VALUE {"Number": r.Number} FROM c JOIN r IN ( SELECT VALUE IIF(IS_ARRAY(c.Records), c.Records, [c.Records]) )
效果说明
- 单对象结构的
"Records": {"Number": "1"}会被处理为[{"Number": "1"}],可正常被JOIN遍历得到Number=1的结果 - 原数组结构的Records不会被修改,原有Number=2、Number=3的结果正常返回
- 最终输出完全符合期望的三条结果结构
内容的提问来源于stack exchange,提问作者Selvaraj Ruban
相关产品推荐
相关产品推荐

