6

我有 2 种节点类型让我们说“学生”和“教师”类型

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

Student 可以与 Class 节点建立可选的关系,如“TEACHES”。

(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

我由此得到了结果。先匹配学生条件,然后查找关系为空

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 回答