Neo4jは方向性のない関係を許可していません。当然のことながら、何らかの方向性を持つ方向性がない関係をモデル化しました。Neo4jは、自然に方向付けられた関係を自然のものと区別します。
(p1:Person)-[team_member_of]->(p2:Person)
(p1:Person)<-[team_member_of]<-(p3:Person)
質問中、私はp1
のすべてのチームメンバーを知りたいと思います。これは可能です
MATCH(p1:Person)-[team_member_of]-(Person)
WHERE id(p1) = someId
この関係タイプでは、両方向でtraveseに意味があります。照会ながら 他の関係の種類がありますが
(p1:Person)-[driver_of]->(p2:Person)
(p1:Person)<-[driver_of]-(p3:Person)
を言って、私はp1
のすべてのドライバを知ってほしいです。これを行うことができます
MATCH(p1:Person)<-[driver_of]-(Person)
WHERE id(p1) = someId
この場合、私たちは一方向だけで照会する必要があります。
これら2つのユースケースを区別するために、各関係にプロパティを追加しました。 (これはのNeo4jは方向なし関係を許可しない理由の目的を破っての一種である。)
関係が本当に方向/方向性
を持っている場合、私は見つけるために、他の方法を考えることはできませんdirected: true/false
を言ってどのように良い方法でそれを行うための任意の考えですか?
あなたは 'directed:true/false'の関係プロパティをどのような状況で使用していますか? –
この種の知識は通常、DBに格納する必要はありません。開発者は、どちらの関係を双方向として扱うべきか、その理由を示すデータモデルのドキュメントを用意する必要があります。実行時にリレーションシップを指向性として扱うべきかどうかを決定するクエリを書く以外に、選択肢がないことは非常にまれです。 – cybersam
@cybersamありがとうございました。私はその知識を私のAPIに移しました。今や、関係についての財産を維持する必要はありません。私はキャッシュ内の情報を維持し、各要求に対して、キャッシュにチェックインして、指示された/無作為のCypherクエリを作成します。できます! – brownfox