- 精通Neo4j
- 龐國明等
- 1138字
- 2023-07-17 19:01:05
3.2.8 列表
Cypher對列表(List)有很好的支持。
3.2.8.1 概述
可以使用方括號和一組以逗號分隔的元素來創建一個列表。
查詢:

結果:

下面的例子使用range函數創建列表。它指定了列表包含元素的開始數字和結束數字。范圍的兩端也是包含在內的,例如:
查詢:

結果:

可以使用方括號[]訪問列表中的元素。
查詢:

結果:

索引也可以為負數,這時將以列表的末尾作為開始點訪問。
查詢:

結果:

也可以在[]中指定列表返回指定范圍的元素。它將提取開始索引到結束索引的值,但不包含結束索引所對應的值。如下面例子中,開始索引為0,結束索引為3,結果將返回索引0、1、2對應的值,但不會返回結束索引3對應的值。
查詢:

結果:

查詢:

結果:

查詢:

結果:

查詢:

結果:

注意:如果是一個range的索引值越界了,那么直接從越界的地方進行截斷以返回結果。如果是單個元素的索引值越界了,則返回null。
查詢:

結果:

查詢:

結果:

可以用size函數獲取列表的長度,例如:
查詢:

結果:

3.2.8.2 List推導式
List推導式(Comprehension)是Cypher基于現有列表創建列表的一種語法構造。它遵循數學上的集合,替代映射和過濾函數。
查詢:

結果:

如果希望分別過濾或映射,WHERE部分或者表達式部分都是可以省略的。
查詢:

結果:

查詢:

結果:

3.2.8.3 模式推導式
模式推導式是Cypher基于模式匹配的結果創建列表的一種語法構造。模式推導式將像一般的MATCH語句那樣去匹配模式,斷言部分與一般的WHERE語句一樣,但它將產生一個指定的圖制投射。
查詢:

結果:

整個斷言,包括WHERE關鍵字都是可選的,可以被省略。
3.2.8.4 字面值映射
Cypher也可以構造映射。通過REST接口可以獲取JSON對象。在Java中對應的是java.util.Map<String, Object>。
查詢:

結果:

3.2.8.5 Map投射
Cypher支持一個名為“map projections”(Map投射)的概念。它使得基于已有節點、關系和其他map值來構建map變得容易。
Map投射以指向圖實體且用逗號分隔的變量簇開頭,并包含以{}包括起來的映射元素。其語法如下:

一個map元素投射一個或多個鍵值對到map投射。這里有4種類型的map投射元素:
● 屬性選擇器:以投射屬性名作為鍵,map_variable中對應鍵的值作為鍵值。
● 字面值項:來自任意表達式的鍵值對,如key: <expression>。
● 變量選擇器:投射一個變量,變量名作為鍵,變量的值作為投射的值。它的語法只有變量。
● 全屬性選擇器:射來自map_variable中的所有鍵值對。
提示:提示:如果map_variable的值指向一個null,那么整個map投射將返回null。
舉一個投射的例子。找到Charlie Sheen和返回關于他和他參演過的電影。這個例子展示了字面值項類型的map投射,反過來它還在聚合函數collect()中使用了map投射。
查詢:

結果:

以上例子找出演過電影的所有演員,并顯示他們所參演電影的數量。這個例子用一個變量來代表數量,使用變量選擇器來投射值,如下所示:
查詢:

結果:

還是以“Charlie Sheen”為例,下面查詢語句將返回該節點的所有屬性。這里使用了全屬性選擇器來投射所有的節點屬性和一個額外的顯式投射的age屬性。因為此屬性在該節點不存在,所以投射的值為null。
查詢:

結果:
