neo4j图数据库,如何使用match语句查询某个节点数据?
发布于 作者:苏南大叔 来源:程序如此灵动~neo4j
图数据库的cypher
语言的入门文章,这里还是按照CRUD
的思路来讲述。那么,第二篇文章就应该讲述查询部分了,在cypher
里面,称之为match
。本文讲述的就是,在neo4j
里面,主要有节点和关系两种情况组成,本文中主要讲述查询节点,关系的查询将放入下一篇文章中讲述。
大家好,这里是苏南大叔的“程序如此灵动”博客,这里记录苏南大叔和计算机代码的故事。本文讲述,在cyphar
查询语言中,如何利用match
语句查找想要的节点数据。本文测试环境:win10
,neo4j社区版@4.4.5
。龙套数据还是官方自带的movie
数据。
基本思路
本文中主要介绍的就是cql
中的match
系列语句,类似于sql
中的select
语句。
使用match
的时候,首先要理解:
节点是用关系连接起来的,这种描述就是:
(n1)-[r]->(n2)
当然,因为关系有方向,所以,还可以写成
(n1)<-[r]-(n2)
或者无方向版本:
(n1)-[r]-(n2)
还可以省略关系描述,只描述节点:
(n1)--(n2)
上面n1
/r
/n2
都是变量,match
系列语句最基本的框架就是:
MATCH ... RETURN ...
虽然关键字是大写的,但是大小写并不敏感,小写的也能顺利执行。
查询所有节点
正常来说,这个选择所有节点(和关系)的方式是:
MATCH (n) RETURN n
数据上返回的仅仅是节点数据,但是在"图"上还是表现出来了关系,似乎是有些不妥。
下面的节点中,结果以组的形式出现的。由于没有指明关系的方向,两侧的节点相同,但是顺序相反。
考虑到关系的方向性,以及查询节点时,关系描述可以省略。相关的组合如下:
MATCH (n)-[r]-(m) RETURN n,m
MATCH (n)--(m) RETURN n,m
MATCH (n)-[r]->(m) RETURN n,m
MATCH (n)-->(m) RETURN n,m
MATCH (n)<-[r]-(m) RETURN n,m
MATCH (n)<--(m) RETURN n,m
统计节点数据
MATCH (n) RETURN COUNT(n)
MATCH (n) RETURN COUNT(n) as cnt
注意:不能在returncount(n)
的时候,再return
别的,这个时候count()
出来的数据就不是你想要的了。
利用属性查找节点
MATCH (n{born:1964})--(m) RETURN n,m
MATCH (n{born:1964}) RETURN n
MATCH (n) where n.born=1964 and n.name<>"" RETURN n
MATCH (n) where n.born>=1964 RETURN n
不等号的正确表述是:<>
,而不是!=
。
这里的属性有两种描述方式,一种是写在节点描述里面,这种方式很赞,另外一种是传统的where
语句。
match (n:Person) where n.name =~ '苏.*' return n
match (n:Person) where n.name contains '苏' return n;
利用标签查找节点
MATCH (n:Person) RETURN n
这种情况下,就可以对节点做进一步的限制,苏南大叔觉得,就类似于sql
中的select * from Person
。
利用关系查找节点
MATCH (n)-[:ACTED_IN]->(m) RETURN n
这里就是描述关系类型为ACTED_IN
的演员数据。
利用identity查找节点
match (n) where id(n)>19 return n
match (n) where id(n)=2 return n
match (n) where id(n)<2 return n
每个节点在插入数据库的时候,系统都给它自动配置了一个identity
,是个从0开始的自增数值。那么在cypher
里面就表现为id()
。
查找孤立节点
关系成立的前提是有节点,节点存在的前提可是无需关系。所以,世界上是可能存在孤立节点的。
MATCH (n) WHERE NOT (n)--() RETURN n
孤单是一群人的狂欢,狂欢是一群人的孤单~
order处理结果
查询结果排序,查询到的结果如果是一系列数据的话,还可以使用order by
或者limit
来进行进一步处理,这个和以往的sql
经验是一样的。
match (n:Person) return n order by n.born desc
match (n:Person) return n order by id(n) desc
注意order by
的位置,在语句的最后面,如果放到return
之前的话,是会报错的。
limit处理结果
match (n:Person) return n order by id(n) desc skip 0 limit 2
match (n:Person) return n limit 2
传统的limit 0,2
,这里是skip 0 limit 2
,而且skip 0
这块经常是被忽略的。
参考文献
综述
本文就介绍最基本的match...return...
语句,更加高级的应用场景在以后的文章中说明。更多cypher
文章,请点击苏南大叔的博客:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。