2017-06-13 82 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程序来做这件事,或者你需要收集()结果,然后采集感兴趣的集合片。