我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

对于neo4j图数据的CRUD来说,match是一个非常重要的操作。所以,苏南大叔的文章里面,把match也分成了好几篇文章来写,上一篇文章中主要说了匹配节点的问题,本文说一下匹配 relationship 的问题,其实匹配节点和匹配关系的方法差不多。

苏南大叔:neo4j图数据库,如何使用match语句查询某条关系数据? - neo4j-match-relationship
neo4j图数据库,如何使用match语句查询某条关系数据? (图10-1)

大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码的故事。就在刚刚,苏南大叔完成了节点匹配的文章,那么新的问题来了,如果要匹配的是关系呢?match语句该怎么写呢?本文测试环境:win10neo4j@4.4.5。主要的龙套数据还是来自neo4j自带的movie数据。

基本思路

前置阅读文章:

要匹配关系数据,那么就是要了解如何描述这条关系,一条关系依赖于两条节点而存在,并且关系是可以有方向的。

(n1)-[r]->(n2)
(n1)<-[r]-(n2)
(n1)-[r]-(n2)

匹配所有的关系

match p=(n)-[r]->(m) return p

苏南大叔:neo4j图数据库,如何使用match语句查询某条关系数据? - match-n-r-m
neo4j图数据库,如何使用match语句查询某条关系数据? (图10-2)

MATCH (n)-[r]-(m) RETURN r

苏南大叔:neo4j图数据库,如何使用match语句查询某条关系数据? - match-r-1
neo4j图数据库,如何使用match语句查询某条关系数据? (图10-3)

不考虑关系的属性,只考虑关系的类型的话:

MATCH (n)-[r]-(m) RETURN type(r)
MATCH (n)-[r]-(m) RETURN distinct(type(r))

苏南大叔:neo4j图数据库,如何使用match语句查询某条关系数据? - match-r-2
neo4j图数据库,如何使用match语句查询某条关系数据? (图10-4)

MATCH ()-[r]->() RETURN COUNT(r)
MATCH ()-[r]->() RETURN COUNT(r) as cnt

苏南大叔:neo4j图数据库,如何使用match语句查询某条关系数据? - match-r-3
neo4j图数据库,如何使用match语句查询某条关系数据? (图10-5)

根据节点查询关系

MATCH (n:Person{name:'Keanu Reeves'})-[r]-(m) RETURN r,type(r)
MATCH (n:Person)-[r]-(m) where n.name='Keanu Reeves' RETURN r,type(r)

苏南大叔:neo4j图数据库,如何使用match语句查询某条关系数据? - match-r-by-node-1
neo4j图数据库,如何使用match语句查询某条关系数据? (图10-6)

苏南大叔:neo4j图数据库,如何使用match语句查询某条关系数据? - match-r-by-node-2
neo4j图数据库,如何使用match语句查询某条关系数据? (图10-7)

根据type来查询关系

MATCH ()-[r:FOLLOWS]->() RETURN r,type(r)
MATCH ()-[r:ACTED_IN|DIRECTED]->() RETURN r,type(r)

苏南大叔:neo4j图数据库,如何使用match语句查询某条关系数据? - match-r-by-type
neo4j图数据库,如何使用match语句查询某条关系数据? (图10-8)

根据关系属性来查询关系

MATCH ()-[r:ACTED_IN{roles:['Tina']}]->() RETURN r,type(r)
MATCH ()-[r:ACTED_IN]->() where 'Tina' IN r.roles RETURN r,type(r)

苏南大叔:neo4j图数据库,如何使用match语句查询某条关系数据? - match-r-by-props
neo4j图数据库,如何使用match语句查询某条关系数据? (图10-9)

根据identity来查询关系

每条关系也是有个自增的identity的,关系的id和节点的id范围是重叠的。但是,相同identity的数据,可能描述的是节点,也可能描述的是identity

match (n)-[r]->(m) where id(r)=50 return n,id(r),id(n)

苏南大叔:neo4j图数据库,如何使用match语句查询某条关系数据? - match-r-by-id
neo4j图数据库,如何使用match语句查询某条关系数据? (图10-10)

参考文献

综述

匹配关系的过程和匹配节点的过程很相似,不过需要特别说明的就是:节点和关系虽然具有相同的identity,但是他们并不是同一条物理上的数据,在neo4j内部估计也是分别存储的,不知道您是否同意苏南大叔的观点呢?

更多cypher的经验文章,请点击:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   neo4j    cypher