6

タイプ「学生」と「教師」の2つのノードタイプがあります

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

生徒は「TEACHES」として Class ノードと任意の関係を持つことができます。

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

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

教師がいない「学生」ノードを見つけたい。つまり、着信関係「TEACHES」はありません

助けてください。

4

3 に答える 3

11

このようなパターンを探していると思います。

MATCH (s:Student)
WHERE NOT (s)<-[:TEACHES]-(:Teacher)
RETURN s
于 2014-04-21T13:03:53.907 に答える
6

これは、問題を解決するために必要な下部のクエリとともに、簡単なデータ設定です。基本的に、リレーションシップが存在しない状況についてクエリを実行する必要があります。ここでの構文は 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
于 2014-04-21T12:13:31.597 に答える
1

これで結果が出ました。最初に生徒の基準に一致し、次に関係が null であることを確認します

MATCH (s:Student)
OPTIONAL MATCH (t:Teacher)-[r:TEACHES]->(s)
WITH s,r
WHERE r IS NULL
RETURN s.name
于 2014-04-21T12:50:37.137 に答える