neo4j - 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”节点的节点。
非常感谢你的帮助
雷米
解决方案
OPTIONAL MATCH 所做的是,它试图找出图中的模式。如果找到匹配模式,则返回 Node,否则将其替换为 NULL。我希望这会消除造成的混乱。
推荐阅读
- wpf - 获取以超链接为内容的复选框内容
- scala - Not Able to Compile When Mixing In A Trait When Using TableDrivenPropertyChecks
- c# - 使用 C# 在 MySQL DB 中插入来自 JSON 响应的 DateTime
- mysql - 在 Wordpress 中使用 NOT IN 和 NOT BETWEEN 查询的问题
- apache-spark - 指定字符串长度超过 256 的 pyspark 数据帧模式
- javascript - TypeError:超级表达式必须为空或函数
- openxml - OpenXML - 将书签应用于 Word 文档中的段落
- tensorflow - 损失函数中的张量流投影?
- python - 在 Python (2.7.12) ctypes 中返回一个数组:第一次运行时结果不正确,从第二次运行开始没问题
- r - 如何通过时间戳创建唯一键