2017-03-08 66 views
0

如何使用具有可變長度關係的參數?neo4j將參數傳遞給可變長度關係

MATCH path=(:Person {id: {id}})=[:HAS_FRIEND*0..{num_friends}]->(:Person)

我試圖創建一個通用查詢,以便我可以通過值「NUM_FRIENDS位」納入各級,我需要關係的CYPHER查詢。

我得到一個錯誤,所以我想知道如何做這樣的事情?

回答

2

參數不能用作跳數。

但是你可以使用path expanderapoc

match (P:Person {id: {id}}) with P 
call apoc.path.expand(P, 'HAS_FRIEND>', 'Person', 0, {num_friends}) yield path 
return path 

適合評論:

match (P:Person {id: {id}}) with P 
call apoc.path.expand(P, 'HAS_FRIEND>', 'Person', 0, {num_friends}) yield path 
with path, last(nodes(path)) as lst where not (lst)-[:HAS_FRIEND]->(:Person) 
return path 
+0

看起來像我的例子不是一個好一個。我實際上是在搜索一個序列,而不是朋友的朋友。所以我實際上只需要找到最長的路徑,而不是所有路徑的列表。根據我當前的例子,通常我在'MATCH'語句之後有'WHERE NOT(last:Person) - [:HAS_FRIEND] - >(:Person)''。您的示例能否提供僅找到最長序列的方法? –

+0

@TerenceChow您可以在路徑擴展器後添加「where」。 –

+0

我不認爲你的編輯工作,因爲它返回0結果。我猜'last(節點(路徑))'在返回後隱式地沒有關係?在任何情況下,我解決了我的問題,如果有人在將來尋找它: 'WITH collect(nodes(path))AS路徑,MAX(長度(路徑))AS maxLength WITH FILTER(path IN path WHERE length(path)= maxLength)[0] as longest' –

相關問題