首页 > 解决方案 > Neo4J 密码可选匹配如何工作?

问题描述

我今天在理解密码中的 OPTIONAL MATCH 子句时遇到了一个问题。让我们考虑这个简单的案例:

CREATE (:a {type:"group"})-[:a_rel]->(:a {type: "app"})-[:b_rel]->(:b);

这将创建 2 个具有不同类型属性的“a”节点,以及一个“b”节点。它们都在一个简单的路径中 a-->a-->b

然后,我试图匹配具有“组”类型的“a”节点,连接到另一个“a”节点,可选地连接到“b”节点。

因此,如果我运行以下查询,我希望它不会返回任何内容:

MATCH(x:a)-->(y:a) 
where x.type = "group" 
OPTIONAL MATCH (y)-->(z:b) 
where z IS NULL 
return y

但它总是返回路径的第二个“a”节点,在 where 子句中使用 IS NULL 或 IS NOT NULL。

你能解释一下我在这里不明白的地方吗?在我的真实模型中,第二个“a”节点可以连接或不连接到“b”节点。我想检索所有未连接到任何“b”节点的节点。

非常感谢你的帮助

雷米

标签: neo4jcypher

解决方案


OPTIONAL MATCH 所做的是,它试图找出图中的模式。如果找到匹配模式,则返回 Node,否则将其替换为 NULL。我希望这会消除造成的混乱。


推荐阅读