Cypher查询,列出具有相同关系属性的节点



我正在学习Nosql,我正在使用Neo4j Sandbox,这里是我的查询来创建我的节点和它们之间的关系:

CREATE (n0:Student { nb: '0', name: 'A' })
CREATE (n1:Student { nb: '1', name: 'B' })
CREATE (n2:Student { nb: '2', name: 'C' })
CREATE (n3:Student { nb: '3', name: 'D' })
CREATE (n4:Student { nb: '4', name: 'E' })
CREATE (c1:Course { course_nb: '1', course_name: 'Cryptography' })
CREATE (c2:Course { course_nb: '2', course_name: 'Big Data' })
CREATE (c3:Course { course_nb: '3', course_name: 'Cloud' })
CREATE (n1)-[:Follow]->(c1)
CREATE (n2)-[:Follow]->(c1)
CREATE (n3)-[:Follow]->(c1)
CREATE (n3)-[:Follow]->(c2);

我想列出与相同的course_nb或course_name属性相关的学生节点

Result should be : 
╒------------------╤-------------------- -╕
|  "Students.name" | "Courses.course_name"|
-------------------|-----------------------
"B"                | "Cryptography"
"C"                | "Cryptography"
"D"                | "Cryptography"

我试过这个查询:

MATCH(n:Course)<-[r:Follow]-(name)
RETURN n

这返回与学生节点相关的所有课程,我也尝试了一些查询与WHERE和with语句,但没有成功

基本上我想列出学同一门课的学生。

您可以通过在MATCH子句中应用course_nb过滤器获得与课程相关的所有学生,如下所示:

MATCH(n:Course{course_nb: '1'})<-[r:Follow]-(person:Student)
RETURN  person.name, n.course_name

或者,您应该按课程名称对学生进行分组,并且只选择有多个学生的课程,如下所示:

MATCH(n:Course)<-[r:Follow]-(person:Student)
WITH n.course_name AS cname, COLLECT(person.name) AS persons WHERE size(persons) > 1
UNWIND persons AS personName
RETURN cname, personName

相关内容

  • 没有找到相关文章

最新更新