Neo4j多关系查询

Xacegod

我正在使用Neo4j做一个学校项目,遇到了问题。我想让所有已申请参加考试且参加任何考试或已通过其ID或索引号注册的学生。我将学生和科目与考试联系在一起,考试与属性(学生)-[考试]-(主题)和/或(学生)-[注册]-(考试)有关系。我需要1个按ID排列的Student,在1个查询中该学生与Subjects的所有连接。该数据库如下所示:

MERGE (std5:STUDENT { name:'Nola', surname:'Joan', indexnumber:12000, semester:'I' })
MERGE (std4:STUDENT { name:'Pola', surname:'Moan', indexnumber:12001, semester:'II' })

MERGE (sub1:SUBJECT { name:'Databases', semester:'VII' })
MERGE (sub2:SUBJECT { name:'Advanced Databases', semester:'VIII' })

MERGE (std5) - [ :EXAM { signed:' ' , mark:6 , date:'12.01.2017.' }] -> (sub1)//mark 6 is passing
MERGE (std4) - [ :EXAM { signed:' ' , mark:5 , date:'12.01.2017.' }] -> (sub1)

MERGE (std5) - [ :REGISTRATION {date:"2/11/2015", charge:0,  term:'June'}] -> (sub1)

MERGE (std5) - [ :REGISTRATION {date:"2/11/2016", charge:0,  term:'June'}] -> (sub1)

MERGE (std4) - [ :REGISTRATION {date:"2/11/2015", charge:0,  term:'June'}] -> (sub2)

我使用的查询就是这个查询,但是却给了我两倍的数据,通常这是错误的。我需要一个特定的学生来获得所有这些考试的所有考试和注册信息,因此我可能会获得有关谁以及何时参加和/或通过了考试,已注册或他从未注册并参加过考试的完整列表。

OPTIONAL MATCH (p:STUDENT) - [d:EXAM] - (c:SUBJECT)

WHERE p.indexnumber = 12000  and d.mark<5 //failing grade

WITH collect (distinct c) as c1,d

OPTIONAL MATCH (p:STUDENT) - [b11:EXAM] - (c:SUBJECT)

WHERE p.indexnumber = 12000

WITH p , count(c) as rels, collect(b11) as exams,d,collect(distinct c +c1) as c2

RETURN p, c2, d, rels , exams

综上所述,学生是通过注册或考试或两者都联系在一起的,我需要为该学生获得所有这些索引号的关系。然后计算与主题的所有这些关系,因为学生参加该考试的次数的数据已保存在与该主题的关系考试中。同样,所有分数<6的学生考试不及格。因此,我掌握了大量信息,并打算在恋爱关系中充分利用它。将其乘以科目和考试的数量,复杂性就会增加。

加伯·沙尼亚斯(Gabor Szarnyas)

我还不太了解您的要求,但有几点建议:

  • 使用MATCH子句一次选择学生,稍后再使用该变量。
  • 您可以通过包含{indexnumber: 12000}MATCH子句中而不是向中添加条件来缩短代码WHERE
  • 使用collect(distinct c + c1)包括c1每个c元素集合,这可能不是您想要的。

因此,为了收集失败和成功的考试以及注册信息,我将运行以下查询(如InverseFalcon所建议进行更新):

MATCH (p:STUDENT {indexnumber: 12000})
OPTIONAL MATCH (p) - [e1:EXAM] -> (c1:SUBJECT)
WHERE e1.mark < 5
WITH p, collect(e1) AS failedExams
OPTIONAL MATCH (p) - [e2:EXAM] -> (c2:SUBJECT)
WHERE e2.mark >= 5
WITH p, failedExams, collect(e2) AS successfulExams
OPTIONAL MATCH (p) - [e3:REGISTRATION] -> (c3:SUBJECT)
RETURN failedExams, successfulExams, collect(e3) AS examRegistrations

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章