neo4j图数据库,如何使用match语句查询某条关系数据?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
对于neo4j
图数据的CRUD
来说,match
是一个非常重要的操作。所以,苏南大叔的文章里面,把match
也分成了好几篇文章来写,上一篇文章中主要说了匹配节点的问题,本文说一下匹配 relationship 的问题,其实匹配节点和匹配关系的方法差不多。
大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码的故事。就在刚刚,苏南大叔完成了节点匹配的文章,那么新的问题来了,如果要匹配的是关系呢?match
语句该怎么写呢?本文测试环境:win10
,neo4j@4.4.5
。主要的龙套数据还是来自neo4j
自带的movie
数据。
基本思路
前置阅读文章:
要匹配关系数据,那么就是要了解如何描述这条关系,一条关系依赖于两条节点而存在,并且关系是可以有方向的。
(n1)-[r]->(n2)
(n1)<-[r]-(n2)
(n1)-[r]-(n2)
匹配所有的关系
match p=(n)-[r]->(m) return p
MATCH (n)-[r]-(m) RETURN r
不考虑关系的属性,只考虑关系的类型的话:
MATCH (n)-[r]-(m) RETURN type(r)
MATCH (n)-[r]-(m) RETURN distinct(type(r))
MATCH ()-[r]->() RETURN COUNT(r)
MATCH ()-[r]->() RETURN COUNT(r) as cnt
根据节点查询关系
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)
根据type来查询关系
MATCH ()-[r:FOLLOWS]->() RETURN r,type(r)
MATCH ()-[r:ACTED_IN|DIRECTED]->() RETURN r,type(r)
根据关系属性来查询关系
MATCH ()-[r:ACTED_IN{roles:['Tina']}]->() RETURN r,type(r)
MATCH ()-[r:ACTED_IN]->() where 'Tina' IN r.roles RETURN r,type(r)
根据identity来查询关系
每条关系也是有个自增的identity
的,关系的id
和节点的id
范围是重叠的。但是,相同identity
的数据,可能描述的是节点,也可能描述的是identity
。
match (n)-[r]->(m) where id(r)=50 return n,id(r),id(n)
参考文献
- https://newsn.net/say/neo4j-match-node.html
- https://newsn.net/say/neo4j-match-relationship.html
- https://neo4j.com/docs/cypher-manual/4.4/
- https://neo4j.com/docs/cypher-refcard/4.4/
综述
匹配关系的过程和匹配节点的过程很相似,不过需要特别说明的就是:节点和关系虽然具有相同的identity
,但是他们并不是同一条物理上的数据,在neo4j
内部估计也是分别存储的,不知道您是否同意苏南大叔的观点呢?
更多cypher
的经验文章,请点击:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。