如果我想对前一个MATCH
的前25个结果执行MATCH
查询,我将如何在Cypher中执行此操作?
我的第一个查询是:
START inputMovie=node(0)
MATCH (inputGenre:Genre)-[:IS_GENRE]-(inputMovie:Movie)
WITH inputMovie, COLLECT(inputGenre) AS inputGenres
MATCH (genre:Genre)-[o:IS_GENRE]-(outMovies:Movie)
WITH inputGenres, outMovies, genre
WHERE (genre IN inputGenres)
RETURN outMovies.title, count(genre) AS foo
ORDER BY foo desc
LIMIT 25
我如何才能仅那25个结果执行MATCH查询?我可以收集多个节点吗? COLLECT(m)
将收集与WHERE
约束匹配的每个节点。有没有办法从MATCH
查询收集前25名?
答案 0 :(得分:0)
[EDITED]
首先,您可以改进当前的查询。以下更短更快的查询应该是等效的(并且避免使用不推荐使用的START
子句):
MATCH (outMovie:Movie)-[:IS_GENRE]-(:Genre)-[:IS_GENRE]-(inputMovie:Movie)
WHERE ID(inputMovie) = 0
MATCH (outMovie)-[:IS_GENRE]-(genre:Genre)
RETURN outMovie.title, count(genre) AS foo
ORDER BY foo DESC
LIMIT 25
通常,如果要扩展现有查询,可以将RETURN
替换为WITH
。您只需为尚未具有标识符的返回值提供别名(在您的情况下,outMovies.title
需要别名)。
以下是您的查询的简单示例:
MATCH (outMovie:Movie)-[:IS_GENRE]-(:Genre)-[:IS_GENRE]-(inputMovie:Movie)
WHERE ID(inputMovie) = 0
MATCH (outMovie)-[:IS_GENRE]-(genre:Genre)
WITH outMovies.title AS title, count(genre) AS foo
ORDER BY foo DESC
LIMIT 25
RETURN COUNT(title) AS num_titles;
返回的num_titles
最多为25个。