Azure CosmosDB中对数组内字段求和并过滤文档的技术问题
Azure Cosmos DB 查询报错解决:筛选余额非零的文档
原查询报错的核心问题是直接使用SUM(c.invoices.value)不符合Cosmos DB SQL语法——c.invoices是数组类型,无法直接通过SUM函数对数组内的嵌套字段求和,必须使用Cosmos DB提供的ARRAY_SUM专用函数来处理数组求和逻辑。
正确查询语句(推荐写法,支持较新版本Cosmos DB)
SELECT c.id FROM pros c WHERE c.id = 'somevalue' AND ARRAY_SUM(c.invoices, (inv) => inv.value) <> 0
兼容旧版本的替代写法
如果你的Cosmos DB版本不支持lambda表达式语法,可以用子查询先提取数组中的value字段组成新数组,再求和:
SELECT c.id FROM pros c WHERE c.id = 'somevalue' AND ARRAY_SUM(ARRAY(SELECT VALUE inv.value FROM inv IN c.invoices)) <> 0
逻辑说明
ARRAY_SUM会计算数组中指定字段的总和,当invoices数组为空时,返回值为0,会被筛选条件排除;- 只有当数组内所有
value的总和不等于0时,文档才会被选中。
内容的提问来源于stack exchange,提问作者user2981411
相关产品推荐
相关产品推荐

