2016-09-23 8 views
0

私はtwitterのようなユーザー間で以下のように管理しなければならない小さなプロジェクトに取り組んでいます。私は特定のノードのフォロワーを返すクエリを作成しようとしています。それを "X"ノードと呼んでみましょう。したがって、クエリーは「X」のフォロワーと、「X」のフォロワーのフォロワーの数と、そのカウントの「X」を含む「X」のフォロワーがいくつのノードに続くかのカウントを返します。ごめんなさい。のは、画像と例を見てみましょう:Neo4J Cypher - 一致したノードの関係数

私は次のノードがあります。

Nodes

をそして私は、すべてのノード2の信者と私はその信者の前に言及したカウントを知りたいです。私は次のクエリを作成:

MATCH (:User{id:2})<-[:Follows]-(followers) 
OPTIONAL MATCH (followers)-[r1:Follows]->(:User) 
OPTIONAL MATCH (:User)-[r2:Follows]->(followers) 
RETURN followers.id, count(r1) AS Follows, count(r2) AS Following; 

をしかし、それは二つの値に失敗:ノード1は、次のノードの数とノード6次のノードの数:ここで enter image description here

あなたが見ることができますが、すべての関係: enter image description here

何か助けていただければ幸いです。ありがとう。

答えて

2

私はあなたの両方のオプションマッチを背中合わせにするといくつかの重複した結果が生じると考えています(変数が関係する各段階の出力を考慮してください...複数の行は、各フォロワーに従っている行の一致)。

あなたは、各オプションMATCH後(数を取得)あなたのデータを組み立てることによってこの問題を解決することができますが、より良いアプローチは、オプションMATCHESを使用してから切り替えて、代わりにSIZE機能と直接関係の数を得ることです:

MATCH (:User{id:2})<-[:Follows]-(followers) 
RETURN followers.id, SIZE((followers)-[:Follows]->()) AS Follows, SIZE(()-[:Follows]->(followers)) AS Following 
+0

ああ私の神よ、ありがとう!それは魅力のように働いた! – Guolf3377

関連する問題