Neo4j 密码 "at least 2 directors and at least 5 actors"
Neo4j Cypher "at least 2 directors and at least 5 actors"
哪部电影至少有 2 位导演和至少 5 位演员?到目前为止得到这个但它给了我错误的答案。它给出了太多的电影和计数。
MATCH (a:Person)-[:ACTED_IN]->(m:Movie)<-[:DIRECTED]-(d:Person) WITH m, count(a) AS numAct, count(d) AS numDir WHERE numAct >= 5 AND numDir >= 2 RETURN m.title, numDir AS director_count, numAct AS actor_count
有什么问题吗?
聚合部分的工作方式是按电影节点分组'm'。在这部分,
...WITH m, count(a) AS numAct, count(d) AS numDir...
它将电影、演员和导演收集为单独的行,电影、演员和导演的每种组合一行,然后计算行数。如果你运行,
MATCH (a:Person)-[:ACTED_IN]->(m:Movie)<-[:DIRECTED]-(d:Person)
RETURN m, a, d
您将准确看到计数聚合将处理的行
要解决您的问题,您必须更新密码,分解聚合。一种方法是,
MATCH (a:Person)-[:ACTED_IN]->(m:Movie) WITH m, count(a) AS numAct
MATCH (m)<-[:DIRECTED]-(d:Person) WITH m, numAct, count(d) as numDir
WHERE numAct >= 5 AND numDir >= 2
RETURN m.title, numDir AS director_count, numAct AS actor_count
根据@Graphileon 的观察更新
我想最短的路是
MATCH (m:Movie)
WHERE size([(m)<-[:DIRECTED]-(p:Person) | p]) >= 2
AND size([(m)<-[:ACTED_IN]-(p:Person) | p]) >= 5
RETURN m
哪部电影至少有 2 位导演和至少 5 位演员?到目前为止得到这个但它给了我错误的答案。它给出了太多的电影和计数。
MATCH (a:Person)-[:ACTED_IN]->(m:Movie)<-[:DIRECTED]-(d:Person) WITH m, count(a) AS numAct, count(d) AS numDir WHERE numAct >= 5 AND numDir >= 2 RETURN m.title, numDir AS director_count, numAct AS actor_count
有什么问题吗?
聚合部分的工作方式是按电影节点分组'm'。在这部分,
...WITH m, count(a) AS numAct, count(d) AS numDir...
它将电影、演员和导演收集为单独的行,电影、演员和导演的每种组合一行,然后计算行数。如果你运行,
MATCH (a:Person)-[:ACTED_IN]->(m:Movie)<-[:DIRECTED]-(d:Person)
RETURN m, a, d
您将准确看到计数聚合将处理的行
要解决您的问题,您必须更新密码,分解聚合。一种方法是,
MATCH (a:Person)-[:ACTED_IN]->(m:Movie) WITH m, count(a) AS numAct
MATCH (m)<-[:DIRECTED]-(d:Person) WITH m, numAct, count(d) as numDir
WHERE numAct >= 5 AND numDir >= 2
RETURN m.title, numDir AS director_count, numAct AS actor_count
根据@Graphileon 的观察更新
我想最短的路是
MATCH (m:Movie)
WHERE size([(m)<-[:DIRECTED]-(p:Person) | p]) >= 2
AND size([(m)<-[:ACTED_IN]-(p:Person) | p]) >= 5
RETURN m