简体   繁体   English

Neo4j的极限结果

[英]Limit results in Neo4j

I have directors who have directed films. 我有导演电影的导演。 Films have genres. 电影具有流派。 I want to get first 5 movies for a director, sorted by release date and for each movie the first 2 genres sorted by name. 我想获得一部导演的前5部电影,按发行日期排序,每部电影的前2部电影按名称排序。

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

This gives me first 5 movies of Steven Spielberg sorted by release_date. 这给了我史蒂芬·斯皮尔伯格的前5部电影,按发布日期排序。 Now for each movie, how do I get first 2 genres sorted by name? 现在,对于每部电影,我如何获得按名称排序的前两种类型?

There's a knowledge base article on limiting match results per row that will help you here. 有一篇关于限制每行匹配结果的知识库文章,将在这里为您提供帮助。

In short, either you can use APOC Procedures for this, or you'll need to COLLECT() results then take the interested slice of the collection. 简而言之,您可以为此使用APOC程序,或者您需要COLLECT()结果然后获取该集合的感兴趣的片段。

Your question appears to be a duplicate of How to limit a subquery in cypher? 您的问题似乎是如何限制密码子查询的重复项 .

However, the accepted self-answer therein is just an approximation to the desired result. 然而,其中所接受的自我回答仅是期望结果的近似值。 In your case it should be something like the following: 您的情况应类似于以下内容:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM