Neo4j 独立选择多个匹配子句

Neo4j independent selection over several match clauses

我想 select 使用 neo4j 的用户,他们观看的动作片数量以及每个用户有多少部由 Roland Emmerich 执导的动作片。

我尝试了多种形式的查询:

match (u:User)-[:watched]->(m:Movie)-[belongs_to]->       
(Category{category_name:"Action"}) with count(m) as actionMovies, u 
match (m:Movie)<-[directed]-(Director{director_name:"Roland Emmerich"})
return u, count(m) as MoviesFromRE, actionMovies

但是查询执行永远不会完成。所以我假设我正在做类似交叉连接的事情。

实际上我希望第一个计数独立于第二个,因为当编译器到达第二个匹配子句时它已经计算出来了。

这是相关的数据库视图

感谢任何建议和帮助

去掉拼写错误并在 with 子句中包含 Movies 后就可以了:

match (u:User)-[:watched]->(m:Movie)-[:belongs_to]->      
(:Category{category_name:"Action"}) with count(m) as actionMovies, u, m
match (m)<-[:directed]-(:Director{director_name:"Roland Emmerich"})
return u, count(m) as MoviesFromRE, actionMovies order by u.user_name

现在我总是为 actionMovies 获取 1。我认为这是因为我现在首先将 with clause by Movies 分组。我想我需要一种方法将电影从第一个子句带到第二个子句,但不将我的第一个结果按它们分组。

actionMovies 你总是得到 1 的原因是在这个子句中:

WITH COUNT(m) AS actionMovies, u, m

该子句(部分)表示:"count the number of m nodes for every unique pair of u and m nodes"。该计数必须始终为 1。

这个查询应该会更好:

MATCH (u:User)-[:watched]->(am:Movie)-[:belongs_to]->(:Category{category_name:"Action"})
WITH u, COLLECT(am) AS ams
UNWIND ams AS m
OPTIONAL MATCH (m)<-[dir:directed]-(:Director{director_name:"Roland Emmerich"})
RETURN u, COUNT(dir) AS MoviesFromRE, SIZE(ams) AS actionMovies
ORDER BY u.user_name;