Neo4j申请收集功能

时间:2015-04-23 08:39:46

标签: neo4j cypher

我的数据如下

node - student
node - exam
Relationship (student)-[:given]->(exam)

这里有一名学生参加了多项考试。 我需要获取所有用户的最后3个考试

我做过这样的事 -

MATCH (s:student)-[:given]->(e:exam)
return id(s) as student_id, s.name as student_name,
collect({exam_id:id(e), mark:e.marks,  exam_date:e.examp_date})

它会为我提取数据但是,我只需要通过exam_date订购考试,并且应该有限制,这样我才能获得最后3门考试

我希望这可以在一个查询中完成

如果需要更多解释,请在此发表评论。

由于

2 个答案:

答案 0 :(得分:2)

试试这个

MATCH (s:student)-[r:given]->(e:exam)
WITH s,r,e ORDER BY e.exam_date DESC
return id(s) as student_id, s.name as student_name,
collect({exam_id:id(e), mark:e.marks,  exam_date:e.examp_date})[0..3]

答案 1 :(得分:1)

您的模型并未真正针对此类查询进行优化,您可能需要查看考试的链接列表。

无论如何这是一个有效的查询:

MATCH (s:student)
MATCH (s)-[:given]->(e:exam)
WITH s, e
ORDER BY e.exam_date
WITH s, collect(e) as exams
return id(s) as student_id, s.name as student_name,
extract(x in exams[0..3] | 
         {exam_id: id(x), mark: x.marks, exam_date: x.examp_date}) as exams