0
如何使用具有可變長度關係的參數?neo4j將參數傳遞給可變長度關係
MATCH path=(:Person {id: {id}})=[:HAS_FRIEND*0..{num_friends}]->(:Person)
我試圖創建一個通用查詢,以便我可以通過值「NUM_FRIENDS位」納入各級,我需要關係的CYPHER查詢。
我得到一個錯誤,所以我想知道如何做這樣的事情?
如何使用具有可變長度關係的參數?neo4j將參數傳遞給可變長度關係
MATCH path=(:Person {id: {id}})=[:HAS_FRIEND*0..{num_friends}]->(:Person)
我試圖創建一個通用查詢,以便我可以通過值「NUM_FRIENDS位」納入各級,我需要關係的CYPHER查詢。
我得到一個錯誤,所以我想知道如何做這樣的事情?
參數不能用作跳數。
但是你可以使用path expander
從apoc
:
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
看起來像我的例子不是一個好一個。我實際上是在搜索一個序列,而不是朋友的朋友。所以我實際上只需要找到最長的路徑,而不是所有路徑的列表。根據我當前的例子,通常我在'MATCH'語句之後有'WHERE NOT(last:Person) - [:HAS_FRIEND] - >(:Person)''。您的示例能否提供僅找到最長序列的方法? –
@TerenceChow您可以在路徑擴展器後添加「where」。 –
我不認爲你的編輯工作,因爲它返回0結果。我猜'last(節點(路徑))'在返回後隱式地沒有關係?在任何情況下,我解決了我的問題,如果有人在將來尋找它: 'WITH collect(nodes(path))AS路徑,MAX(長度(路徑))AS maxLength WITH FILTER(path IN path WHERE length(path)= maxLength)[0] as longest' –