2017-05-03 10 views
0

ウォレット・ペア内のノードを除くすべてのウォレット・ノードを取得したいのですが、それらの間に1つだけの:SendTo関係があり、他のウォレットとの間には:SendToの関係はありません。このクエリはその目的に合っていますか?:Cypher - このクエリは私の目的を達成するでしょうか?

MATCH (n:Wallet) 
OPTIONAL MATCH (n)-[r1:SendTo]-(n1:Wallet)-[r12:SendTo]-(n2:Wallet) 
WHERE n <> n1 
WITH n,count(n1) + count(n2) as rels 
OPTIONAL MATCH (n3:Wallet)-[r2:SendTo]-(n)-[r22:SendTo]-(n4:Wallet) 
WHERE n <> n3 
WITH n, rels, count(n3) + count(n4) as rels1 
WHERE rels1 > 0 or rels>0 
return n 

私が行ったテストから、正しいと言えます。しかし、私は第二の意見を好むだろう。

グラフの作成方法:各ウォレットノードは、1つ以上の単方向の:SendToリレーションシップを介して別のウォレットノードまたはそのノードに接続されます。同じ2つのWalletノード間に1つ以上のそのような関係を持たせることは可能です。

+1

こんにちは!良いアイデアは、あなたの質問に初期データの質量(Cypher CREATEコマンドのリスト、恐らくグラフの描画のリスト)を追加して、他のユーザーがより効率的にあなたを助けることです。 –

+1

グラフの説明文を追加しました。 – Aqqqq

+2

ノードから関係度を取得すると便利です。 WHERE degree> 1 AND ... ...のような 'WITH n、size((n) - [:SendTo] - – InverseFalcon

答えて

2

「0または2以上のエッジを持つすべてのウォレットを検索する」という簡単な質問をするには、クエリがたくさんあります。したがって、技術的に正しい(読みづらい、あまりにも多くのことが起こる)場合でも、それはゆっくりと実行されます。それでは、あなたが本当に欲しいのは

MATCH (w:Wallet) 
WITH w, size((n)-[:SendTo]-()) as edges 
WHERE edges = 0 OR 1 < edges 
RETURN w 

(あなたが何をしているのか、何かがわからない場合は、原則として、それはどちらか間違っている、または誰かが「修正」にそれを試してみて、それが間違っているでしょう)

です
関連する問題