0

次のようなクエリを使用しています。

(n)-[*]->(m)
Any depth.

しかし、次のようなクエリでリレーション名をフィルタリングすることはできません。

(n)-[*:DOES]->(m)
Any depth.

関連パスに異なるリレーションがあるため、リレーション名をフィルタリングする必要があります。それが役立つ場合、ここに私のグラフがあります:

CREATE (Computer { name:'Computer' }),(Programming { name:'Programming' }),(Java { name:'Java' }),(GUI { name:'GUI' }),(Button { name:'Button' }), Computer<-[:IS]-Programming, Programming<-[:IS]-Java, Java<-[:IS]-GUI, GUI<-[:IS]-Button, (Ekin { name:'Ekin' }), (Gunes { name:'Gunes' }), (Ilker {name:'Ilker'}), Ekin-[:DOES]->Programming, Ilker-[:DOES]->Java, Ilker-[:DOES]->Button, Gunes-[:DOES]->Java

「プログラミング」と「DOES」の関係が深い名前(Ekin、Ilker、Gunes)を取得したいと考えています。

編集:

2 つの異なるクエリの結果をマージすることで、必要な値を取得できます (到達したい最上位ノードは 13 だと思います)。

START n=node(13) 
MATCH p-[:DOES]->()-[*]->(n) 
RETURN DISTINCT p

START n=node(13) 
MATCH p-[:DOES]->(n) 
RETURN DISTINCT p

単一のクエリで実行したい。

4

2 に答える 2

1

マッチングパターンを「p-[:DOES]->()-[*0..]->n」に変更し、

Match p-[:DOES]->()-[*0..]->n
Return distinct p.name

可変長関係「[*]」は 1..* を意味します。パスには 0..* の長さの関係が必要です。

于 2013-10-01T13:06:03.530 に答える
1

Neo4j 3.0で回答を更新するだけです。

MATCH p-[:DOES*0..]->(n)
RETURN DISTINCT(p.name)

受け入れられた回答と同じ結果を返します。

于 2016-09-30T13:51:22.093 に答える