如何编写COSMOS DB查询语句提取数组元素的指定字段
Cosmos DB 数组字段提取指定属性查询方案
核心实现方法
使用Cosmos DB SQL API内置的ARRAY_MAP函数遍历数组并重构每个元素的属性,是性能最优的实现方式,无需展开数组再做聚合操作。
完整查询示例
如果你需要保留文档的其他原有字段,仅重构details数组的结构,查询语句如下:
SELECT c.*, ARRAY_MAP( d => { "name": d.name, "roll_no": d.roll_no }, c.details ) AS details FROM c
注意:如果你不需要保留文档的其他原有字段,把
c.*替换为你需要返回的指定字段即可。
可选增强:过滤无效元素
如果需要排除details数组中缺少name或roll_no属性的无效元素,可以组合使用ARRAY_FILTER函数:
SELECT c.*, ARRAY_MAP( d => { "name": d.name, "roll_no": d.roll_no }, ARRAY_FILTER( d => IS_DEFINED(d.name) AND IS_DEFINED(d.roll_no), c.details ) ) AS details FROM c
输出效果
上述查询返回的details数组会完全匹配需求结构,每个元素仅保留name和roll_no两个属性,其余属性会被自动剔除。
内容的提问来源于stack exchange,提问作者shashank shekhar
相关产品推荐
相关产品推荐

