2017-06-13 69 views
0

我有導演執導電影。電影有流派。我想獲得導演的前5部電影,按發行日期排序,每部電影按照名稱排序前2部電影。限制結果在Neo4j

MATCH(d {name: "Steven Spielberg"}) -- (f:Film) 
WITH f 
ORDER BY f.release_date DESC LIMIT 5 
MATCH (f) -- (g:Genre) 
RETURN f,g 

這給了我第5部史蒂文·斯皮爾伯格的電影,由release_date排序。現在對於每部電影,我如何獲得按姓名排序的前兩個類型?

+0

你的'MATCH(f) - (g)'查詢的一部分將匹配'g'到任何節點,而不僅僅是類型(特別是,在你的結果中至少有一行'g'將對應於代表** Steven Spielberg的節點**)。 – Leon

+0

[如何限制cypher中的子查詢?]可能的重複(https://stackoverflow.com/questions/29023703/how-to-limit-a-subquery-in-cypher) – Leon

回答

0

你的問題似乎是How to limit a subquery in cypher?的重複。

然而,其中接受的自我回答只是對期望結果的近似。在你的情況應該是這樣的:

MATCH(d {name: "Steven Spielberg"}) -- (f:Film) 
WITH f 
MATCH (f) -- (g:Genre) 
WITH f,g ORDER BY g.name 
RETURN f,collect(g)[0..2] ORDER BY f.release_date DESC LIMIT 3 
1

有上limiting match results per row的知識庫文章,將幫助你在這裏。

總之,要麼你可以使用APOC程序來做這件事,或者你需要收集()結果,然後採集感興趣的集合片。