Cypher函數是對圖進行查詢和操做的重要工具。 node
謂詞函數返回true或者false,主要用於檢查是否存在或知足特定的條件。express
1,Exists函數
若是指定的模式存在於圖中,或者特定的屬性存在於節點、關係或Map中,那麼函數返回True工具
例如,節點具備name屬性,並check圖中是否存在特定的模式:spa
MATCH (n)
WHERE exists(n.name)
RETURN n.name AS name, exists((n)-[:MARRIED]->()) AS is_married
2,檢查集合元素code
all()表示全部的元素都知足條件,any()表示至少一個元素知足條件,none()函數表示沒有一個元素知足條件,single()表示只有一個元素知足條件對象
例如,ALL謂詞表示,在路徑中,全部節點都必須具備age屬性,而且age屬性值都必須大於30:blog
MATCH p =(a)-[*1..3]->(b) WHERE a.name = 'Alice' AND b.name = 'Daniel' AND ALL (x IN nodes(p) WHERE x.age > 30) RETURN p
ANY謂詞表示,節點的array屬性中至少有一個元素值是one:ip
MATCH (a) WHERE a.name = 'Eskil' AND ANY (x IN a.array WHERE x = 'one') RETURN a.name, a.array
NONE謂詞表示,在路徑中,沒有節點的age屬性等於25ci
MATCH p =(n)-[*1..3]->(b) WHERE n.name = 'Alice' AND NONE (x IN nodes(p) WHERE x.age = 25) RETURN p
SINGLE謂詞表示,在路徑中,只有一個節點的eyes屬性是blue:
MATCH p =(n)-->(b) WHERE n.name = 'Alice' AND SINGLE (var IN nodes(p) WHERE var.eyes = 'blue') RETURN p
變量函數返回標量值
1,得到節點和關係的ID和屬性
CREATE (p:Person { name: 'Stefan', city: 'Berlin' }) RETURN id(p), properties(p)
2,關係
關係是由開始節點,結束節點和邊構成的:
MATCH (n)-[r]->() WHERE n.name = 'Alice' RETURN type(r), startNode(r), endNode(r)
3,列表相關
列表是元素的有序序列,Cypher使用List來表示列表類型,應用於列表的函數有:
例如,節點的array屬性,
MATCH (a) WHERE a.name = 'Eskil' RETURN a.array, head(a.array), last(a.array), size(a.array)
4,size()和length()函數
求長度的函數:
例如,統計路徑列表中的元素數量:
MATCH (a) WHERE a.name = 'Alice' RETURN size((a)-->()-->()) AS fof
聚合函數用於對查詢的結果進行統計:
在聚合計算中,能夠引用分組鍵來對查詢的結果進行分組聚合,例如,在return子句中,若是表達式不是聚合函數,那麼該表達式是分組key,下面的表達式是按照type(r)分組,計算每一個分組中記錄的數量。
RETURN type(r), count(*)
列表是Cypher中的一個重要的複合類型,對列表進行操做的函數主要是生成列表、獲取列表對象、抽取特定的列表元素、過濾列表元素和對列表元素進行迭代計算。
1,抽取元素構成列表
extract函數的做用是從列表中抽取值,
extract(variable IN list | expression)
根據抽取的值組裝成一個列表,返回一個列表:
MATCH p =(a)-->(b)-->(c) WHERE a.name = 'Alice' AND b.name = 'Bob' AND c.name = 'Daniel' RETURN extract(n IN nodes(p)| n.age) AS extracted
2,過濾列表元素
filter函數用於對列表中的元素進行過濾,
filter(variable IN list WHERE predicate)
把過濾後的元素組成一個了表,返回該列表:
MATCH (a) WHERE a.name = 'Eskil' RETURN a.array, filter(x IN a.array WHERE size(x)= 3)
3,得到列表
MATCH (a) WHERE a.name = 'Alice' RETURN labels(a),keys(a) MATCH p =(a)-->(b)-->(c) WHERE a.name = 'Alice' AND c.name = 'Eskil' RETURN nodes(p), relationships(p)
4,序列的生成和倒置
range()函數,用於生成一個有序的序列,reverse()函數把原始列表的元素進行倒置
range(start, end [, step])
reverse(list)
5,迭代計算列表
reduce()函數應用在列表上,對列表中的每一個元素e進行迭代計算,在元素e上運行表達式(expression),把當前的結果存儲在累加器中,進行迭代計算,並返回最終計算的標量結果:
reduce(accumulator = initial, e IN list | expression)
例如,初始的age值是0,對路徑p中的全部節點,計算各個節點的age值的和:
MATCH p =(a)-->(b)-->(c) WHERE a.name = 'Alice' AND b.name = 'Bob' AND c.name = 'Daniel' RETURN reduce(totalAge = 0, n IN nodes(p)| totalAge + n.age) AS reduction
參考文檔: