2014-04-21 59 views
5

沒有傳入的關係,我有2種節點類型允許類型「學生」和說「老師」如何找到節點與Neo4j的

Student have {id, name}. 
Teacher have {id, name}. 

學生可以有類節點作爲「教」可選的關係。

(t:Teacher)-[r:TEACHES]->(c:Student). 

[r:TEACHES] - Optional relationship. (present or may not present) 

我想找到沒有老師的「學生」節點。即沒有任何傳入關係「教」

請幫助。

回答

4

這是一個簡單的數據設置,以及底部的查詢需要解決您的問題。基本上,你想查詢關係不存在的情況。這裏的語法是針對neo4j 2.0的,因此舊版本的答案會略有不同。

neo4j-sh (?)$ create (t:Teacher {name:"Bob"})-[r:TEACHES]->(s:Student {name:"Mary"}); 
+-------------------+ 
| No data returned. | 
+-------------------+ 
Nodes created: 2 
Relationships created: 1 
Properties set: 2 
Labels added: 2 
19 ms 

neo4j-sh (?)$ create (t:Teacher {name:"Mark"}); 
+-------------------+ 
| No data returned. | 
+-------------------+ 
Nodes created: 1 
Properties set: 1 
Labels added: 1 
5 ms 

neo4j-sh (?)$ MATCH (s:Student) WHERE NOT (s)<-[:TEACHES]-(:Teacher) RETURN s 
+0

我想找到沒有老師的「學生」節點。感謝幫助。 –

+0

只需在相反的方向運行查詢:match(s:Student)where(s)< - [:TEACHES] - ()return s; – FrobberOfBits

1

我得到了這個結果。首先匹配學生標準,然後找到關係爲空

MATCH (s:Student) 
OPTIONAL MATCH (t:Teacher)-[r:TEACHES]->(s) 
WITH s,r 
WHERE r IS NULL 
RETURN s.name 
+0

你可以剖析這個查詢,並與Wes'進行比較,我認爲他可能更直截了當(除非你的教師節點也是' - [:TEACH] - >'student -nodes)。 – jjaderberg

9

我想你正在尋找這種模式。

MATCH (s:Student) 
WHERE NOT (s)<-[:TEACHES]-(:Teacher) 
RETURN s 
相關問題