Cosmos DB如何查询匹配指定对象列表的记录?
你写的这种直接在IN子句中传入完整JSON对象的查询,无法在Cosmos DB中正常执行获得预期结果。
原因
Cosmos DB的IN运算符仅支持对标量值(字符串、数字、布尔值等单个值)做批量匹配,不支持直接对完整JSON对象进行匹配校验。
正确实现方案
这里给你两种可直接运行的写法,都能得到你预期的查询结果:
方案1:拆分匹配条件用OR拼接
适合预定义对象数量少的场景,逻辑直观:
SELECT * FROM c WHERE (c.name = "name1" AND c.age = 25) OR (c.name = "name2" AND c.age = 27)
方案2:用ARRAY_CONTAINS做对象批量匹配
适合预定义对象数量多的场景,可直接把你的对象列表代入查询,不需要拆分大量OR条件:
SELECT * FROM c WHERE ARRAY_CONTAINS( [{"name":"name1", "age":25}, {"name":"name2", "age":27}], {"name": c.name, "age": c.age}, true )
第三个参数true表示要求精确匹配对象的所有字段和值,避免出现字段不匹配的错误命中。
内容的提问来源于stack exchange,提问作者Passella
相关产品推荐
相关产品推荐

