2016-08-05 3 views
-1

さまざまなことを照会し、リレーションシップの組み合わせを返したいと思います。以下の例では、Joeという名前のすべての人をメインセントに戻したいと思います。has_addressとhas_stateの両方の関係を返すことにします。いくつかのリレーションシップタイプを検索する場合のNeo4Jの結合リレーションシップを返す

MATCH (p:Person), 
    (p)-[r:has_address]-(a:Address), 
    (a)-[r1:has_state]-(s:State) 
WHERE p.name =~ ".*Joe.*" AND a.street = ".*Main St.*" 
RETURN r, r1; 

しかし、私はのNeo4jブラウザでこのクエリを実行し、「テキスト」ビューの下で見たとき、テーブル(このようなもの)に列としてrとR1を入れているようだ:

│r │r1 │ 
╞═══╪═══| 
│{} │{} │ 

ではなく、同様に、異なる行の各関係で、必要に応じて:私は他の場所でのフィルタリングのためのCSVファイルとしてこれをダウンロードしたい

Joe Smith | has_address | 1 Main Street 
1 Main Street | has_state | NY 
Joe Richards | has_address | 22 Main Street 

。希望の結果を得るためにNeo4Jでクエリを書き直すにはどうすればよいですか?

答えて

0

Cypher cheat sheet、特にリレーションシップ関数を参照してください。

つまり、必要なすべてのノードに変数があります。各行に必要なすべてのデータを出力することができます。

MATCH (p:Person), 
    (p)-[r:has_address]-(a:Address), 
    (a)-[r1:has_state]-(s:State) 
WHERE p.name =~ ".*Joe.*" AND a.street = ".*Main St.*" 
RETURN p.name AS name, a.street AS address, s.name AS state 

これで十分です。

あなたが上記のように求めているのは、rとr1を結合する方法ですが、それらが交互になるように、1つの行はrで、次は対応するr1です。これはむしろ非典型的なクエリです。このような出力を簡単に作成するためのサポートはあまりありません。

行の順序が間違っていても構いませんが、簡単ですが、各関係の開始ノードと終了ノードはもはや同じ種類のものではなくなりました。

MATCH (p:Person), 
    (p)-[r:has_address]-(a:Address), 
    (a)-[r1:has_state]-(s:State) 
WHERE p.name =~ ".*Joe.*" AND a.street = ".*Main St.*" 
WITH COLLECT(r) + COLLECT(r1) as rels 
UNWIND rels AS rel 
RETURN startNode(rel) AS start, type(rel) AS type, endNode(rel) as end 
関連する問題