美文网首页
NEO4J新手入门(三)

NEO4J新手入门(三)

作者: sesgtxdy | 来源:发表于2020-02-29 14:55 被阅读0次

2.MATCH命令,WHERE子句和RETURN子句

前文中使用

MATCH (a:人),(b:人)
WHERE a.name="小华"
AND b.name="小丽" 

取到了小华和小丽两个节点
那么具体怎么使用MATCH命令呢?

1. MATCH命令单独使用

如找到所有的具有“人”标签的节点,则可输入:

MATCH (a:人) RETURN a

a是任意字母 需要注意的是 如果查询以MATCH结尾会报:

Query cannot conclude with MATCH

所以在单独使用MATCH命令的时候需要加上RETURN子句。
RETURN 子句同理也不可单独使用 ,应该与CREATE命令或者MATCH命令共同使用。最终结果如图:


图片.png

同理节点之间的关系也可以通过MATCH找到,如:

MATCH (a)-[r:父子]->(b)
RETURN r

结果如图:


图片.png

2. MATCH与WHERE的配合使用

2.1 寻找特定节点

上文中的

MATCH (a:人) RETURN a

只能找到同一标签的节点,如果要具体找到某一个标签,该如何实现呢?
如找到小华这一个节点则可使用:

MATCH (a:人) WHERE a.name="小华" RETURN a

即可实现找到某一选定节点的功能,如图:


图片.png

值得注意的是,前文中使用的

MATCH (a:人),(b:人)
WHERE a.name="小华"
AND b.name="小丽"

实际上是为了省事的错误写法,此写法会导致报出警告:

This query builds a cartesian product between disconnected patterns.

即两个查询一起会导致出现笛卡尔积使得查询速度变慢,如果要同时MATCH两个节点,可以使用:

MATCH (a:人)
WHERE a.name="小华"
MATCH (b:人)
WHERE b.name="小丽"
RETURN a,b

这样就不会出现笛卡尔积的现象,最终结果如下:


图片.png

如图中所示,如果找两个节点,且他们之间有相互关系的时候,则会将他们俩之间的关系也返回。
如果要找到某个特定的关系应该怎么做呢?
首先我们在小明小华小马之间CREATE朋友的关系,其中小明和小华是三年,小明和小马是6年,小马和小华是2年,可得如图关系:


图片.png
比如我想得到一段时长3年的朋友关系,只需:
MATCH (a)-[r:朋友]->(b)
WHERE r.时长=3
RETURN r

即可得到:


图片.png

相关文章

网友评论

      本文标题:NEO4J新手入门(三)

      本文链接:https://www.haomeiwen.com/subject/yxglhhtx.html