1、概述
APOC提供以下過程來運行有條件分支的Cypher語句。
接口 |
過程 |
CALL apoc.when( |
基於條件,執行給定參數的ifQuery或elseQuery只讀查詢。 |
CALL apoc.do.when( |
基於條件,執行給定參數的ifQuery或elseQuery更新查詢。 |
CALL apoc.case( |
給定條件-只讀查詢對的列表,在條件匹配後執行對應的查詢;如果沒有匹配的條件則執行elseQuery對應的查詢。支持對查詢傳遞參數。 |
CALL apoc.do.case( |
給定條件-更新查詢對的列表,在條件匹配後執行對應的查詢;如果沒有匹配的條件則執行elseQuery對應的查詢。支持對查詢傳遞參數。 |
這類apoc過程使得我們可以定義查詢執行的條件分支。Cypher的CASE…WHEN只能在賦值表達式中使用。
過程接口 |
// 簡單條件分支:IF..THEN..ELSE,只讀查詢。 // CALL apoc.when( condition,
// 簡單條件分支:IF..THEN..ELSE,更新操作。 // CALL apoc.do.when( condition, |
參數名 |
類型 |
缺省值 |
可爲空? |
說明 |
condition |
布爾值 |
無 |
否 |
判斷條件的結果。可以是表達式。 |
ifQuery |
字符串 |
'' |
是 |
condition爲true時執行的Cypher語句。 |
elseQuery |
字符串 |
'' |
是 |
condition爲false時執行的Cypher語句。 |
params |
MAP |
{} |
是 |
查詢的參數 |
// 例子: 搜索“人物”節點,並讀取其genre屬性。
// 如果屬性存在,返回其值;
// 如果不存在,則創建該屬性,並賦值“男”。
MATCH (n:人物)
WITH exists(n.genre) AS flag, n.genre AS genre, id(n) AS pid
CALL apoc.do.when(flag,
'RETURN $genre AS genre',
'SET n.genre = "男" RETURN "男" AS genre',
{genre:genre, pid:pid})
YIELD value
RETURN value
3、apoc.case過程
// 複雜條件分支:CASE..WHEN,CASE..WHEN..,ELSE,只讀查詢。
CALL apoc.case(
[condition,query,
condition,query, ...],
elseQuery:'',
params:{}
) YIELD value
//複雜條件分支:CASE..WHEN,CASE..WHEN..,ELSE,更新操作。
CALL apoc.do.case(
[condition,query,
condition,query, ...],
elseQuery:'',
params:{}
) YIELD value
// 搜索“人物”節點,並讀取其genre屬性。
// 如果屬性爲“男”,初始化屬性class爲1;
// 爲“女”,初始化屬性class爲2;
// 其他,初始化class屬性爲-1。
// 這裏,genre屬性必須存在,否則會報空指針錯誤。
MATCH MATCH (n:人物)
WITH n.genre AS genre,n
CALL apoc.do.case(
[ genre='男',
'WITH $node AS n SET n.class=1 RETURN n',
genre='女',
'WITH $node AS n SET n.class=2 RETURN n'
],
'WITH $node AS n SET n.class="-1" RETURN n',
{node:n}
)
YIELD value
RETURN value