neo4j图数据库,如何使用match语句查询某个节点数据?
发布于 作者:苏南大叔 来源:程序如此灵动~

neo4j
图数据库的cypher
语言的入门文章,这里还是按照CRUD
的思路来讲述。那么,第二篇文章就应该讲述查询部分了,在cypher
里面,称之为match
。本文讲述的就是,在neo4j
里面,主要有节点和关系两种情况组成,本文中主要讲述查询节点,关系的查询将放入下一篇文章中讲述。

大家好,这里是苏南大叔的“程序如此灵动”博客,这里记录苏南大叔和计算机代码的故事。本文讲述,在cyphar
查询语言中,如何利用match
语句查找想要的节点数据。本文测试环境:win10
,neo4j社区版@4.4.5
。龙套数据还是官方自带的movie
数据。
基本思路
本文中主要介绍的就是cql
中的match
系列语句,类似于sql
中的select
语句。
使用match
的时候,首先要理解:
节点是用关系连接起来的,这种描述就是:
当然,因为关系有方向,所以,还可以写成
或者无方向版本:
还可以省略关系描述,只描述节点:
上面n1
/r
/n2
都是变量,match
系列语句最基本的框架就是:
虽然关键字是大写的,但是大小写并不敏感,小写的也能顺利执行。
查询所有节点
正常来说,这个选择所有节点(和关系)的方式是:
数据上返回的仅仅是节点数据,但是在"图"上还是表现出来了关系,似乎是有些不妥。

下面的节点中,结果以组的形式出现的。由于没有指明关系的方向,两侧的节点相同,但是顺序相反。

考虑到关系的方向性,以及查询节点时,关系描述可以省略。相关的组合如下:


统计节点数据

注意:不能在returncount(n)
的时候,再return
别的,这个时候count()
出来的数据就不是你想要的了。
利用属性查找节点
不等号的正确表述是:<>
,而不是!=
。

这里的属性有两种描述方式,一种是写在节点描述里面,这种方式很赞,另外一种是传统的where
语句。

利用标签查找节点
这种情况下,就可以对节点做进一步的限制,苏南大叔觉得,就类似于sql
中的select * from Person
。

利用关系查找节点
这里就是描述关系类型为ACTED_IN
的演员数据。

利用identity查找节点
每个节点在插入数据库的时候,系统都给它自动配置了一个identity
,是个从0开始的自增数值。那么在cypher
里面就表现为id()
。

查找孤立节点
关系成立的前提是有节点,节点存在的前提可是无需关系。所以,世界上是可能存在孤立节点的。

孤单是一群人的狂欢,狂欢是一群人的孤单~
order处理结果
查询结果排序,查询到的结果如果是一系列数据的话,还可以使用order by
或者limit
来进行进一步处理,这个和以往的sql
经验是一样的。
注意order by
的位置,在语句的最后面,如果放到return
之前的话,是会报错的。

limit处理结果
传统的limit 0,2
,这里是skip 0 limit 2
,而且skip 0
这块经常是被忽略的。

参考文献
综述
本文就介绍最基本的match...return...
语句,更加高级的应用场景在以后的文章中说明。更多cypher
文章,请点击苏南大叔的博客:


