2014-04-21 10 views
5

Ich habe 2 Knotentypen sagen vom Typ lässt ‚Student‘ und ‚Lehrer‘Wie finden Knoten ohne eingehende Beziehung in Neo4j

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

Schüler der Klasse Knoten haben kann optional Beziehung als ‚LEHRT‘.

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

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

Ich möchte "Student" Knoten finden, die keinen Lehrer haben. Es gibt keine eingehende Beziehung "TEACHES"

Bitte helfen Sie.

Antwort

4

Hier ist eine einfache Dateneinrichtung, zusammen mit der Abfrage an der Unterseite müssen Sie Ihr Problem lösen. Im Wesentlichen möchten Sie Situationen abfragen, in denen keine Beziehung besteht. Die Syntax hier ist für neo4j 2.0, daher wäre die Antwort für ältere Versionen etwas anders.

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

Ich wollte "Student" Knoten, die keinen Lehrer haben. Danke für die Hilfe. –

+0

Führen Sie die Abfrage einfach in die entgegengesetzte Richtung: match (s: Student) wo nicht (s) <- [: TEACHES] -() return s; – FrobberOfBits

1

Ich habe Ergebnis davon. Erste Übereinstimmung mit Studenten Kriterien und dann finden Beziehung ist Null

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

Sie könnten diese Abfrage profilieren und mit Wes vergleichen, ich denke, dass er wahrscheinlich einfacher ist (und ich würde das ': Teacher'-Label weglassen, wenn Sie nicht-Lehrer Knoten haben, die auch' - [: TEACH] -> 'Schüler -nodes). – jjaderberg

9

Ich denke, Sie suchen nach dieser Art von Muster.

MATCH (s:Student) 
WHERE NOT (s)<-[:TEACHES]-(:Teacher) 
RETURN s 
Verwandte Themen