2012-12-06 43 views
3

在我的域中,一個節點可以有多個相同類型的關係到其他實體。每個關係都有幾個屬性,我想通過至少兩個關係來獲取給定屬性的節點。如何獲得與Neo4j Cypher中給定屬性具有給定數量傳出關係的節點?

EG:節點之間的關係具有屬性year。如何找到與year設置爲2012至少有兩個傳出關係的節點?

爲什麼Chypher查詢到目前爲止看起來像這樣(語法錯誤)

START x = node(*) 
MATCH x-[r:RELATIONSHIP_TYPE]->y 
WITH COUNT(r.year == 2012) AS years 
WHERE HAS(r.year) AND years > 1 
RETURN x; 

我也試過嵌套查詢,但我相信它不是在Cypher不允許的。最接近的是下面的,但我不知道如何擺脫節點的值爲1:

START n = node(*) 
MATCH n-[r:RELATIONSHIP_TYPE]->c 
WHERE HAS(r.year) AND r.year == 2012 
RETURN n, COUNT(r) AS counter 
ORDER BY counter DESC 

回答

5

嘗試此查詢

START n = node(*) 
MATCH n-[r:RELATIONSHIP_TYPE]->c 
WHERE HAS(r.year) AND r.year=2012 
WITH n, COUNT(r) AS rc 
WHERE rc > 1 
RETURN n, rc 
+0

我很好奇是否'r.year'部分是由索引供電?無論如何,這不是更快嗎? START r = relationship:yearIndex('year:2012') MATCH n- [r:RELATIONSHIP_TYPE] - > c WITH n,COUNT(r)AS rc WHERE rc> 1 RETURN n,rc' – ulkas

+0

@ulkas它不是,但他們沒有提到問題中的索引。如果可能,您應該避免使用節點(*)並在開始查找時使用索引。 :) –

相關問題