2015-04-23 39 views
1

我有數據如下Neo4j的應用,以收集功能

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

試試這個

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

你的模型是不是真的這樣的查詢優化,你可能想看看在考試鏈表。

無論如何,這是一個工作查詢:

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