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;
我想 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;