目录

Cypher 的基本语法:节点、边、属性、模式

Cypher 语法视频介绍

介绍 Cypher 语法有一个视频1,很不错。

https://cdn.jsdelivr.net/gh/dfface/img0@master/2022/05-28-5D93Vy.png

https://cdn.jsdelivr.net/gh/dfface/img0@master/2022/05-28-p90quT.png

https://cdn.jsdelivr.net/gh/dfface/img0@master/2022/05-28-Oiw9cL.png

https://cdn.jsdelivr.net/gh/dfface/img0@master/2022/05-28-6SJtaW.png

https://cdn.jsdelivr.net/gh/dfface/img0@master/2022/05-28-OV28Q1.png

https://cdn.jsdelivr.net/gh/dfface/img0@master/2022/05-28-NKlwOg.png

Cypher 基于 Pattern

模式(Pattern)由节点和边组成,并且可以表达简单或复杂的遍历或路径。

模式的识别是基础,而人们是擅长识别这些模式的,因此 Cypher 也基于模式来简化查询。

模式也是 AsciiArt,很直观。

注释

双斜线://

节点表示 Node

用圆括号包围一个节点:(node)

为什么是圆括号?因为看起来像一个圆圆的节点啊。

举例:

()               // 匿名节点,可指代任意节点
(p:Person)       // 变量p与标签Person
(:Technology)    // 无变量,标签Technology
(work:Company)   // 变量work与标签Company

节点变量

如果之后想引用这个节点,那么我们可以对节点分配一个变量,命名就类似编程语言的变量命名。

如果节点与返回的结果并不相关,那么可以指定匿名节点即空括号(),这意味着之后不能返回这个节点。

节点标签

节点标签可以把相似的节点聚集起来。

就像 SQL 中选择特定的某张表。

如果不指定标签,就会查询所有节点,这真的很笨重。

边表示Relationship

边在Cypher中使用箭头表示--><--

边的属性可以用箭头中的方括号表示-[:LIKES]->

无向图的边没有方向--,这就表示任一方向的关系都可以被遍历到。这对忽略方向时的查询非常有用。

如果数据是有向边,那么当查询指定了错误的方向时返回的结果为空。在这种情况下,使用无向边来查询是合适的。

边类型

边类型对边增加了语义,展示了节点之间是为何相连的。

边类型最好是有语义的,如使用动词或动作。

边变量

就像节点变量一样,当我们想引用某个边时,可以设置变量,如[r]

匿名边:----><--

有变量的边:-[rel]->-[rel:LIKES]->

注意如果没有冒号的话就不是边类型了,而成了边变量。

属性 Property

属性就是键值对,对节点和边的细节进行描述。

这些属性使用花括号表示,很像Python的字典格式,可以放在节点中,也可以放在边中。

例如:

(p:Persion {name: 'Jack'})-[rel:IS_FRIENDS_WITH {since: 2018}]->()

模式 Pattern

模式可由节点和关系组成的构建块来表示。

这些构建块可以表达简单或复杂的模式。

模式可以写作连续的路径或由逗号分隔的离散的小模式串。

例如:

(p:Person {name: "Jennifer"})-[rel:LIKES]->(g:Technology {type: "Graphs"})