[英]Cypher/Neo4j: Get books co-authored with at least one auth from a different country?
[英]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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.