Neo4j之Cypher语法(1)

1. Cypher类型

Cypher支持的类型系统分为三类:属性类型,复合类型和结构类型。

1.1  属性类型

属性类型:Integer、Float、String和Boolean

Boolean类型:truefalseTRUEFALSE

String类型:'Hello'"World"

1.2 复合类型

复合类型:List和Map,List是有序的值的集合,Map是无序的Key/Value对的集合,通常用于存储节点和关系的属性。

List类型:['a', 'b'][1, 2, 3]['a', 2, n.property, $param][ ]

Map类型:n是节点,prop是节点的属性键,引用属性的值的格式:n.prop,

1.3 结构类型

结构类型:Node类型、关系类型、Path类型:

  • 其中Node类型表示一个节点,由Id、Label和Map构成;
  • 关系类型表示一个关系,由Id、Type、Map和 关系两端的两个节点的Id构成;
  • Path类型表示路径,是节点和关系的序列。Path模式:(a)-->()<--(b)

2. 命名规则和作用域

2.1 命名规则

名称以英语字符开头,能够包含数字,但是数字不能作为首字符,除了下划线和$,不能包含其他符号,注意,下划线应用于名称的中间或结尾,例如,my_variable.

符号只能用于名称的开头,标示一个参数,例如myParam。

名称是大小写敏感的,:PERSON 和 :Person 是不同的。

2.2 作用域

节点的Lable、关系类型和属性键是不同的作用域(Scope),在相同的Scope下,名称是不允许重复的;但是,在不同的Scope中,名称是允许重复的,并且表示不同的含义。

CREATE (a:a {a: 'a'})-[r:a]→(b:a {a: 'a'})

3. CASE表达式

case表达式根据条件对查询的结果进行处理:

CASE
WHEN predicate THEN result
  [WHEN ...]
  [ELSE default]
END

4. 查询的参数

参与的语法是$Param,参数的名称是Param,在传递参数时,必须保证传递的参数和Query中的参数名称相同。

有Cypher的Query是,参数是$ids,

MATCH (n)
WHERE id(n) IN $ids
RETURN n.name

传递给Query的参数是:

{
  "ids" : [ 0, 1, 2 ]
}

5. 操作符

操作符是对Cypher查询进行算术运算,逻辑运算等。

5.1 通用操作符

distinct 用于移除重复值, n.property 用于访问属性,[]是变量的列表

CREATE (a:Person { name: 'Anne', eyeColor: 'blue' }),(b:Person { name: 'Bill', eyeColor: 'brown' }),(c:Person { name: 'Carol', eyeColor: 'blue' })
WITH [a, b, c] AS ps
UNWIND ps AS p
RETURN DISTINCT p.eyeColor

5.2 数学操作符

  • 加减乘除:+,-,*,/
  • 取模:%
  • 取幂:^

5.3 比较运算符

  • 等于:=
  • 不等于:<>
  • 小于、大于、小于等于、大于等于:<、>、<=、>=
  • IS NULL和 IS NOT NULL

5.4 逻辑运算符

与(AND),或(OR),异或(XOR),非(NOT)

WITH [2, 4, 7, 9, 12] AS numberlist
UNWIND numberlist AS number
WITH number
WHERE number = 4 OR (number > 6 AND number < 10)
RETURN number

5.5 字符串

字符串拼接:+

匹配正则:=~

WITH ['mouse', 'chair', 'door', 'house'] AS wordlist
UNWIND wordlist AS word
WITH word
WHERE word =~ '.*ous.*'
RETURN word

对于字符串,使用 STARTS WITH、ENDS WITH和CONTAINS 过滤字符串:

WITH ['John', 'Mark', 'Jonathan', 'Bill'] AS somenames
UNWIND somenames AS names
WITH names AS candidate
WHERE candidate STARTS WITH 'Jo'
RETURN candidate

5.6 列表操作

  • +,列表追加
  • IN:检查成员
  • []:索引,特殊地,[start .. end],从start开始,递增1,但是不包括end
RETURN [1,2,3,4,5]+[6,7] AS myList

WITH [2, 3, 4, 5] AS numberlist
UNWIND numberlist AS number
WITH number
WHERE number IN [2, 3, 8]
RETURN number

WITH ['Anne', 'John', 'Bill', 'Diane', 'Eve'] AS names
RETURN names[1..3] AS result

5.7 访问属性

使用 . 号访问属性

MATCH (n) WHERE 21 < n.age AND n.age <= 30 RETURN n

参考:https://www.cnblogs.com/ljhdo/p/10911426.html

posted @ 2022-09-19 14:58  埋头搬砖  阅读(313)  评论(0编辑  收藏  举报