web-dev-qa-db-ja.com

Neo4j双方向関係

Cypherを使用してNeo4jで双方向の関係を作成する方法はありますか?両方向で2つの単方向の関係を作成するのではなく、関係を双方向にしたいと考えています。例:

(A)<-[FRIEND]->(B)

のではなく:

(A)-[FRIEND]->(B)
(A)<-[FRIEND]-(B)

前もって感謝します :)

23
sgp

いいえ、ありません。 neo4jのすべての関係には方向があり、指定されたノードで開始および終了します。

いくつかの回避策があります。

  • まず、あなたが提案したように、AからBへの関係と、BからAへの関係の2つの関係があります。

  • または、MATCHクエリを作成するときに、次のようなクエリを使用して、パターンを無方向に照合するように指定できます。

    MATCH (A)-[FRIEND]-(B) RETURN A, B
    

    これは、AがBと友達であるかどうか、またはその逆であるかどうかを気にせず、関係を作成するときに任意に方向を選択できるようにします。

34
David Simons

この記事によると: Neo4jでのデータのモデリング:双方向の関係

厳密に良い選択は、クエリ時に方向を指定せずに、任意の方向に関係を作成することです。

MATCH (neo)-[:PARTNER]-(partner)

エンジンはEdgeをどちらの方向にもトラバースできます。逆方向エッジを作成する必要はなく、スペースと走査時間を無駄にするだけです。

15
Kache