Azure Cosmos DB查询问题:如何获取含指定组或空组的记录
解决Azure Cosmos DB查询返回空数组文档的问题
我来帮你搞定这个查询问题!
你的原查询之所以只能返回满足第一个条件的文档,核心问题出在join grp in p.groups这个操作上:当groups数组为空时,这个join不会生成任何匹配的行,那些groups为空的文档(比如你的文档2)根本不会进入WHERE条件的判断环节,自然无法被查询出来。
正确的查询语句
你不需要用join,直接针对p.groups数组做条件判断即可:
SELECT p.name, p.id FROM Product p WHERE ARRAY_CONTAINS(p.groups, {'name': 'abc'}, true) OR ARRAY_LENGTH(p.groups) = 0
关键细节解释
ARRAY_CONTAINS(p.groups, {'name': 'abc'}, true):第三个参数true表示进行精确匹配,它会检查数组中是否存在一个元素的name属性等于'abc',完美匹配你第一个条件的需求。ARRAY_LENGTH(p.groups) = 0:直接判断数组是否为空,满足第二个条件。
用这个查询语句,你的文档1和文档2都会被正确返回:
- 文档1:
groups数组包含name为'abc'的元素,符合第一个条件; - 文档2:
groups数组为空,符合第二个条件。
内容的提问来源于stack exchange,提问作者rupesh gujar
相关产品推荐
相关产品推荐

