簡體   English   中英

Cypher 查詢列出具有相同關系屬性的節點

[英]Cypher query to list nodes with same relationship attribute

我正在學習 Nosql 並且我正在使用 Neo4j 沙盒,這里是我創建節點和它們之間的關系的查詢:

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

這將返回與 Students 節點相關的所有課程,我也嘗試了一些使用 WHERE 和 WITH 語句的查詢但沒有成功

基本上我想列出學習相同課程的學生。

您可以通過在MATCH子句中應用course_nb過濾器來獲取與課程相關的所有學生,如下所示:

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

或者,您應該按課程名稱對學生進行分組,並且只有 select 個課程,有多個學生,如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM