特定のノードに接続していないすべてのノードを検索しようとしています。私は、割り当てを行っている生徒が物語の中でテーマを見つけ、解説を書くアプリを持っています。次に、他の学生は、これらの説明のピアレビューを行います。私のデータは次のようになります。アプリケーションの一部としてNeo4J Cypher特定のノードに接続するノードを除外します
Assignment-hasTheme->Theme-hasChild->Theme
Annotation-theme->Theme
Explication-owner->User
Explication-annotation->Annotation
PeerReview-explication->Explication
、ユーザーはピアレビューを行う必要があるとき、私は他のユーザーによって書き込まれたすべてのexplicationsを見つける必要があります。このクエリは動作するはずのように私には思える:
MATCH
(u),
(a)-[:hasTheme]->(:Theme)
-[:hasChild*]->(:Theme)
<-[:theme]-(ann:Annotation)
<-[:annotation]-(e:Explication)
OPTIONAL MATCH
(e)<-[:explication]-(p:PeerReview)
WHERE id(a)=7 AND id(u)=4
AND (e)-[:owner]->(u)
RETURN e, count(e) AS explicationCount
ORDER BY explicationCount ASC
問題はそれがないということです:私は、すべてのユーザーが書かれているすべてのexplicationsを取得します。それはユーザーが書いた説明を含んでいます。誰もそれらを除外する方法を教えてもらえますか?
ありがとうございました!私はそれをやっていないとは信じられません。私はCypherのドキュメントから誤解していたと思います - 私はWHEREがすべてのMATCH句に当てはまると思っていました。余分な変数は、私がクエリーでやりたかったいくつかの余計なものの結果でした。また、OPTIONAL MATCHでの私の目標は、各説明に含まれるレビューの数を数えることです(これは私がここで取り残したものです)。 –
これはかなり一般的な誤解です。私はCypherを使い始めたときと同じ仮定をしました。あなたの独自のクエリを作成し始めるときにのみ実行するドキュメントからは分かりません。 – InverseFalcon
もう1つのことは...あなたの返す 'e'と' count(e) 'は問題になる可能性があります。これは1行につき1つのExplicitなので、1行ごとに1になると思います。 – InverseFalcon