Cypher是图形数据库查询语言事实上的标准。数据库
Cypher支持的类型系统分为三类:属性类型,复合类型和结构类型。express
1,属性类型函数
属性类型:Integer、Float、String和Booleanspa
Boolean类型:true
, false
, TRUE
, FALSE
code
String类型:'Hello'
, "World"
对象
2,复合类型blog
复合类型:List和Map,List是有序的值的集合,Map是无序的Key/Value对的集合,一般用于存储节点和关系的属性。索引
List类型:['a', 'b']
, [1, 2, 3]
, ['a', 2, n.property, $param]
, [ ]
element
Map类型:n是节点,prop是节点的属性键,引用属性的值的格式:n.prop,作用域
3,结构类型
结构类型:Node类型、关系类型、Path类型:
3,List类型
由标量类型构成的List,例如,['a', 'b']
, [1, 2, 3]
由函数range函数生成的List对象,例如,range(0,10),从start到end的有序数字,Range函数包含两端。
列表(List comprehension):[x IN range(0,10) WHERE x % 2 = 0 | x^3]
4,Map类型
列表的常量表示:{ key: 'Value', listKey: [{ inner: 'Map1' }, { inner: 'Map2' }]}
Map投影,用于从节点、关系和其余Map对象中投影特定元素或变量的值,Map投影的格式是:
map_variable {map_element, [, …n]}
参数注释:
Map投影的示例,actor是Map变量,nrOfMovies是变量,从Map变量中获取name属性,并添加额外的属性nrOfMovies:
MATCH (actor:Person)-[:ACTED_IN]->(movie:Movie)
WITH actor, count(movie) AS nrOfMovies
RETURN actor { .name, nrOfMovies }
对变量进行命名,变量的命名要遵照必定的规则,而且变量具备特定的做用域。
1,命名规则
名称以英语字符开头,可以包含数字,可是数字不能做为首字符,除了下划线和$,不能包含其余符号,
注意,下划线应用于名称的中间或结尾,例如,my_variable,$符号只能用于名称的开头,标示一个参数,例如$myParam。
名称是大小写敏感的,:PERSON 和
:Person 是不一样的。
2,做用域
节点的Lable、关系类型和属性键是不一样的做用域(Scope),在相同的Scope下,名称是不容许重复的;可是,在不一样的Scope中,名称是容许重复的,而且表示不一样的含义。
CREATE (a:a {a: 'a'})-[r:a]→(b:a {a: 'a'})
case表达式根据条件对查询的结果进行处理:
CASE WHEN predicate THEN result [WHEN ...] [ELSE default] END
参与的语法是$Param,参数的名称是Param,在传递参数时,必须保证传递的参数和Query中的参数名称相同。
有Cypher的Query是,参数是$ids,
MATCH (n)
WHERE id(n) IN $ids
RETURN n.name
传递给Query的参数是:
{ "ids" : [ 0, 1, 2 ] }
操做符是对Cypher查询进行算术运算,逻辑运算等。
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
2,数学操做符
3,比较运算符
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,字符串
字符串拼接:+
匹配正则:=~
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
6,列表操做
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
7,访问属性
使用 . 号访问属性
MATCH (n) WHERE 21 < n.age AND n.age <= 30 RETURN n
参考文档: