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文章,请点击苏南大叔的博客: