私は1から3の長さを持つ2つのノード間のすべてのパスを取得しようとしています。それらの間のすべてのノードと関係を取得したいと思います。Cypherを使用すると、長さが事前定義されていないパスに関係名を取得できますか?
私は、クエリを使用しています:
MATCH p=(p1:DOG)-[:A|:B|:C*1..3]->(p3:PERSON)
RETURN p
私は関係の種類を得ることはありません。どうしたらいいですか?
私は1から3の長さを持つ2つのノード間のすべてのパスを取得しようとしています。それらの間のすべてのノードと関係を取得したいと思います。Cypherを使用すると、長さが事前定義されていないパスに関係名を取得できますか?
私は、クエリを使用しています:
MATCH p=(p1:DOG)-[:A|:B|:C*1..3]->(p3:PERSON)
RETURN p
私は関係の種類を得ることはありません。どうしたらいいですか?
を探している何かを説明するかもしれませんが、パスに関係タイプのコレクションを返すように簡潔な方法である:
MATCH (:DOG)-[rels:A|:B|:C*1..3]->(:PERSON)
RETURN [r IN rels | TYPE(r)];
可変長のパスに一致すると、*
(rels
)との関係は、コレクション012関係の。だから、それぞれの関係のTYPE
を抽出するだけです。
リレーションシップは返されるパスオブジェクト内にあります。 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
これはまさに私が探していたものでした。ありがとう! – Inbal
これはまさに私が探していたものでした。ありがとう! – Inbal