2016-05-03 1 views
1

私は1から3の長さを持つ2つのノード間のすべてのパスを取得しようとしています。それらの間のすべてのノードと関係を取得したいと思います。Cypherを使用すると、長さが事前定義されていないパスに関係名を取得できますか?

私は、クエリを使用しています:

MATCH p=(p1:DOG)-[:A|:B|:C*1..3]->(p3:PERSON) 
RETURN p 

私は関係の種類を得ることはありません。どうしたらいいですか?

答えて

2

を探している何かを説明するかもしれませんが、パスに関係タイプのコレクションを返すように簡潔な方法である:

MATCH (:DOG)-[rels:A|:B|:C*1..3]->(:PERSON) 
RETURN [r IN rels | TYPE(r)]; 

可変長のパスに一致すると、*rels)との関係は、コレクション012関係の。だから、それぞれの関係のTYPEを抽出するだけです。

+0

これはまさに私が探していたものでした。ありがとう! – Inbal

2

リレーションシップは返されるパスオブジェクト内にあります。 relationshipsを使ってそれらをコレクションに取り出して、それぞれのタイプを返すだけです。このような何か...

MATCH p=(p1:DOG)-[:A|B|C*1..3]->(p3:PERSON) 
WITH relationships(p) as rels 
UNWIND rels as r 
RETURN type(r) 

これはあなたがここで

より良い少し
MATCH p=(p1:DOG)-[:A|B|C*1..3]->(p3:PERSON) 
RETURN reduce(path_str = "", r in relationships(p) | path_str + startNode(r).name + ' --> ' + type(r) + ' --> ') + 
(nodes(p)[length(p)]).name 
+0

これはまさに私が探していたものでした。ありがとう! – Inbal

関連する問題