0

私はNeo4jで遊んでいて、解決策がない問題があるため、ここで質問します。

私の問題については、本質を捉えた単純化されたバージョンについて説明します。直接または迂回路を介して接続されている場所のグラフがあるとします。

  • 直接: (A)-[:GOES_TO]->(B)
  • 間接: (A)->[:GOES_THROUGH]->(C)-[:COMES_BACK_TO]->(B)

"Go" と "Finish" の間のすべてを GOES_TO 関係で処理したい場合は、Cypher クエリを簡単に使用できます。

START a=node:NODE_IDX(Id = "Go"), b=node:NODE_IDX(Id = "Finish)
MATCH a-[r:GOES_TO*]->b
RETURN a,r,b

ここで、NODE_IDX はノード (Id) のインデックスです。

私が立ち往生するのは、GOES_TO 関係ではなく、複数の GOES_THROUGH-->()-->COMES_BACK_TO 関係の組み合わせ (可変深さ) である "Go" と "Finish" の間のすべてのパスが必要な場合です。

ノード間にさらに多くの関係があるため、GOES_TO 関係をフィルターで除外したくありません。また、それらすべてを (動的に) 削除することにも対応したくありません。私が想定している可変深度のマルチリレーションシップ MATCH を持つことは可能ですか?

ありがとう!

4

1 に答える 1

1

求められていると私が信じていることをもう一度述べさせてください。

"If there is a path of the form (a)-[:X]->(b), find all other paths from a to b."

答えは簡単です。

MATCH p=(a)-[:X]->(b), q=(a)-[r*]->(b) 
WHERE p<>q 
RETURN r;
于 2014-02-01T23:50:18.560 に答える