2013-03-01 65 views
0

有人可以幫我解決這個問題。如何使用密碼查詢檢索具有多個關係的節點

我正在使用cypher查詢來獲得作爲'蜂巢'或'hadoop'的關係的節點,我能夠獲得節點。

但是當我嘗試獲得作爲'蜂巢'和'hadoop'的關係的節點時,我無法獲得節點。

這是查詢我使用

開始N =節點(*)匹配(N) - [R] - (+),其中類型(R)= 「Hadoop的」 和類型(R)=「蜂巢「return n,count(n);

該查詢返回0行。

是我的查詢錯誤還是我需要以另一種方式做。

在此先感謝。

Gouse

回答

2

我覺得您的查詢應該是:

開始N =節點(*)匹配(N) - [R1] - (),(N) - [R2] - ( )其中type(r1)=「Hadoop」 和type(r2)=「hive」返回n,count(n);

3

這應做到:

start n=node(*) match()-[:Hadoop]-(n)-[:hive]-() return n,count(n) 
1

你可以這樣

match (n)-[r:Hadoop|hive]-() 
return n,count(n); 

它會爲您提供你期待什麼樣實現它。比賽條件更好,而不是放在where子句中。

0

首先,您的查詢得不到結果的原因是因爲where type(r)="Hadoop" and type(r)="hive"表示您正在查找r.type =「Hadoop」和「hive」的r實例。由於r.type在任何時候只能有一個值,所以它不可能同時等於Hadoop和Hive;所以聲明可以邏輯上簡化爲「虛假」或基本上放棄所有匹配。

如果你正在尋找要麼關係的所有節點,比Satish Shinde's answer是指定它

match (n)-[:Hadoop|hive]-() 
return n,count(n); 

或者以正確的方式,用方向

match (n)-[:Hadoop|hive]->() 
return n,count(n); 

如果你需要同時在場,比你需要匹配兩個單獨的關係邊緣如下

match()-[:hive]-(n)-[:Hadoop]-() 
return n,count(n); 

或者與方向

match()<-[:hive]-(n)-[:Hadoop]->() 
return n,count(n); 

以及物品是否完整,如果你想檢查這兩個在那裏存在着密切的,你可以使用remigio's answer

start n=node(*) match()-[r2]-(n)-[r1]-() where type(r1)="Hadoop" and type(r2)="hive" return n,count(n); 
相關問題