Neo4j中ALL()谓词函数的行为疑问及正确性验证
Neo4j 5.26.2中ALL()谓词函数对空集合的行为说明
结论
你遇到的查询(3)和(4)返回全部3条结果的行为,完全符合Neo4j官方规范。
核心原理:空真(Vacuous Truth)
ALL()作为全称量词谓词,其语义是**"集合中的每一个元素都满足指定条件"**。在数理逻辑中,当集合为空时,不存在任何违反条件的元素,因此该谓词会默认返回true——这一规则被称为"空真",Neo4j严格遵循这一逻辑定义。
针对你的查询的具体分析
查询(3)
MATCH(p:Parent) WHERE ALL(x IN p.empty_array WHERE x = 2) RETURN p.id, p.empty_array
p.empty_array是预先定义的空数组,没有任何元素需要验证x = 2的条件,因此ALL(...)直接返回true,所有3个Parent节点都被匹配返回。
查询(4)
MATCH(p:Parent)--(c) WITH p, COLLECT(c.does_not_exist) AS does_not_exists WHERE ALL(x IN does_not_exists WHERE x = 2) RETURN p.id, does_not_exists
c.does_not_exist是不存在的属性,执行COLLECT()后得到空数组。基于空真规则,ALL(...)返回true,因此所有Parent节点都被返回。
补充验证
你可以通过以下语句直接验证空数组的ALL()行为:
// 测试空数组的ALL()结果 RETURN ALL(x IN [] WHERE x = 2) AS result; // 结果为true
内容的提问来源于stack exchange,提问作者norihide.shimatani
相关产品推荐
相关产品推荐

