2

パスクエリの経験はあまりありませんがCypher、パスは私が望むことを効率的に行うための合理的な方法のようです...

私の には、次の関連する関係がありますNeo4j

p1-[r:SNEAK]->otherProfile
p1-[r:FRIEND]-otherProfile (the direction not relevant) 
p1-[r:HANG]->venue<-[r:HANG]-otherProfile
p1-[r:INTERACT]->session<-[r:INTERACT]-otherProfile
p1-[r:INTERACT]->session<-[r:LIKE]-otherProfile

p1を手に持っているとしましょう。クエリを実行して、次の条件のうち少なくとも 1 つが存在するすべてのプロファイルを取得したいと考えています (プロファイルに個別のものがあります)。

  • p1 こっそりと
  • || p1 は (友達) です || (友達の友達)
  • p1 少なくとも 1 つの会場をハングアップする
  • p1 には彼らとのセッションがあります
  • p1にはセッションがあり、彼らはそれを気に入りました

また、これらのプロファイル間の関係を把握するために、関係タイプを抽出する機能も必要です...

  • これらがDBのすべての関係タイプであると仮定しましょう

最初は、以下のすべてのパスを取得するだけで簡単に思えます。

p=p1-[r*1..2]-profile

それに関するいくつかの問題:

1) p1 に忍び込んだプロファイルも返し
ます 2) p1の友人の 1 人が忍び込んだプロファイルも返します 3) p1に忍び込んだ
プロファイルの友人であるプロファイルも返します

Cypher私のユースケースの仕事をする1つのクエリを実行することは可能ですか?

4

1 に答える 1

2

簡単なショートカットは、WHEREnot を使用して句でパス修飾子を実行する機能です。したがって、一致を実行してから、それを修飾するWHERE NOT(p1-[:SNEAK*1..2]->profile)か、またはどのように修飾するかを指定できます。

于 2013-06-19T19:22:25.590 に答える