2017-03-08 5 views
0

可変長関係でパラメータを使用するにはどうすればよいですか?neo4jパラメータを可変長関係に渡す

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

私は私が必要とする関係のさまざまなレベルのためにCYPHER問合せに値「num_friends」を渡すことができるように、一般的なクエリを作成しようとしています。

私はエラーが発生しますので、どうすればこのようなことが行われるのだろうかと思いますか?

答えて

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'文の後には'どこでもない(last:Person) - [:HAS_FRIEND] - >(:Person) 'があります。あなたの例で見つけられる最長の配列しか得られない方法はありますか? –

+0

@TerenceChowパス拡張子の後に 'where'を追加することができます。 –

+0

0の結果を返すため、編集がうまくいかないと思います。私は、 'last(nodes(path))'は返された後に暗黙的に関係がないと思いますか?いずれにせよ、誰かが将来それを探すなら、私は次のクエリで私の問題を解決しました: WITH集合(ノード(パス))ASパス、MAX(長さ(パス))AS maxLength WITH FILTER WHERE length(path)= maxLength)[0] as longest' –