CosmosDB中如何用ARRAY_CONTAINS校验对象数组的两个属性
CosmosDB 数组元素多条件筛选问题解决
你的原查询逻辑存在问题:ARRAY_CONTAINS(c.AlertsConfiguration,{"Code": "2"},true) 会检查数组中是否存在Code为"2"的元素,ARRAY_CONTAINS(c.AlertsConfiguration,{"isEnabled":true},true) 会检查数组中是否存在isEnabled为true的元素,但这两个条件可以匹配数组里不同的元素(比如示例文档里Code=2的元素isEnabled为false,但Code=1的元素isEnabled为true,两个条件都满足,所以会被错误返回)。
要筛选出数组中同一个元素同时满足Code="2"且isEnabled=true的文档,推荐以下两种方法:
方法1:使用EXISTS子查询
这是最直观且性能较好的方式:
SELECT c.id FROM c WHERE EXISTS( SELECT VALUE ac FROM ac IN c.AlertsConfiguration WHERE ac.Code = "2" AND ac.isEnabled = true )
方法2:使用ARRAY_FILTER配合ARRAY_LENGTH
通过过滤数组后判断结果长度是否大于0:
SELECT c.id FROM c WHERE ARRAY_LENGTH( ARRAY_FILTER(c.AlertsConfiguration, ac => ac.Code = "2" AND ac.isEnabled = true) ) > 0
这两种方式都会准确匹配到数组中存在同时满足两个条件的元素的文档,避免原查询的逻辑错误。
内容的提问来源于stack exchange,提问作者pedrodotnet
相关产品推荐
相关产品推荐

