neo4j图数据库,如何理解optional match语句?
发布于 作者:苏南大叔 来源:程序如此灵动~
neo4j可以通过match语句匹配节点和关系,这里衍生了一个子语句叫做optional match,也就是可选的match。如何理解这个可选match呢?这就是本文中主要阐述的内容。

大家好,这里是苏南大叔的“程序如此灵动”博客,这里记录苏南大叔和计算机代码的故事。通过本文的学习,您可以了解optional match和更加常见的match语句的区别。测试环境:win10,neo4j社区版@4.4.6,java@11.0.14。本文使用的例子,还是neo4j自带的movie例子。
基本数据情况
这里先回顾一下match语句,参考文章:
这里先直观的观察一下目标数据:
match (m)-[r:FOLLOWS]->(n) return m,r,n
这里有三条关注数据,然后再进行一次match,引出本文的主角。
match (m{name:'James Thompson'}) return m
关注了谁[match]
先看看James Thompson都关注了谁:
match (m{name:'James Thompson'})-[r:FOLLOWS]->(n) return m,r,nmatch (m{name:'James Thompson'}) match (m)-[r:FOLLOWS]->(n) return m,r,n
match (m{name:'James Thompson'}) optional match (m)-[r:FOLLOWS]->(n) return m,r,noptional match (m{name:'James Thompson'})-[r:FOLLOWS]->(n) return m,r,n
这里可以看到:是否使用optional对于既有数据符合查询的情况,没有什么区别。
被谁关注了[optional match]
再看看James Thompson被谁关注了:
match (m{name:'James Thompson'})<-[r:FOLLOWS]-(n) return m,r,nmatch (m{name:'James Thompson'}) match (m)<-[r:FOLLOWS]-(n) return m,r,n
下面的两条optional match返回的结果不同:
match (m{name:'James Thompson'}) optional match (m)<-[r:FOLLOWS]-(n) return m,r,n
optional match (m{name:'James Thompson'})<-[r:FOLLOWS]-(n) return m,r,n
对于不存在的数据,加optional会强制返回null数据,不加的话,就什么数据都没有。
相关链接
- https://neo4j.com/docs/cypher-manual/current/clauses/optional-match/
- https://newsn.net/say/neo4j-match-node.html
- https://newsn.net/say/neo4j-match-relationship.html
综述
更多neo4j语句的相关经验文章,请点击: