Cypher是圖形數據庫查詢語言事實上的標准。
一,Cypher類型系統
Cypher支持的類型系統分為三類:屬性類型,復合類型和結構類型。
1,屬性類型
屬性類型:Integer、Float、String和Boolean
Boolean類型:true, false, TRUE, FALSE
String類型:'Hello', "World"
2,復合類型
復合類型:List和Map,List是有序的值的集合,Map是無序的Key/Value對的集合,通常用於存儲節點和關系的屬性。
List類型:['a', 'b'], [1, 2, 3], ['a', 2, n.property, $param], [ ]
Map類型:n是節點,prop是節點的屬性鍵,引用屬性的值的格式:n.prop,
3,結構類型
結構類型:Node類型、關系類型、Path類型:
- 其中Node類型表示一個節點,由Id、Label和Map構成;
- 關系類型表示一個關系,由Id、Type、Map和 關系兩端的兩個節點的Id構成;
- Path類型表示路徑,是節點和關系的序列。Path模式:(a)-->()<--(b)
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_variable:用於引用Map對象 map_element 有四種格式是:
- 屬性選擇器:格式是 .Key,用於引用Map對象中的屬性
- 嵌入屬性(Literal entry),是一個Key/Value對,例如,key: <expression>,表示嵌入到Map變量中的元素
- 變量選擇器:把一個變量的名稱作為Key,變量的值作為Key的值,構建一個Key/Value對,作為Map變量中的元素
- 屬性全選符號: .*
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表達式根據條件對查詢的結果進行處理:
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,比較運算符
- 等於:=
- 不等於:<>
- 小於、大於、小於等於、大於等於:<、>、<=、>=
- IS NULL和 IS NOT NULL
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,列表操作
- +,列表追加
- 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
7,訪問屬性
使用 . 號訪問屬性
MATCH (n) WHERE 21 < n.age AND n.age <= 30 RETURN n
參考文檔:
