neo4j - 返回不是由特定导演执导但在其他电影中与该导演合作过的演员和电影。密码(neo4j)
问题描述
例如:
下面的查询将返回与拉娜·沃卓斯基合作最多的 10 位演员。
MATCH (actor:Person)-[:ACTED_IN]->(m:Movie)<-[:DIRECTED]-(lana:Person {name: 'Lana Wachowski'})
RETURN actor.name , COUNT(m), collect(m.title)
ORDER by COUNT(m) desc
LIMIT 10
但是我想要一个查询,它将返回上述演员的电影:ACTED_IN,这不是由 Lana Wachoswki 导演的,
我做了这样的事情,但最终会将所有与这位导演合作过的演员归还给我,而不是排名前十的演员。
MATCH (actor:Person)-[:ACTED_IN]->(m:Movie)<-[:DIRECTED]-(lana:Person {name: 'Lana Wachowski'}),
(actor:Person)-[:ACTED_IN]->(other:Movie)
WITH actor, other
WHERE NOT EXISTS((lana)-[:DIRECTED]->(other:Movie)<-[:ACTED_IN]-(actor))
RETURN actor.name , other.title
解决方案
最终看起来,只需传递 m 变量,就可以再次使用它来对 RETURN 进行排序。
MATCH (actor:Person)-[:ACTED_IN]->(m:Movie)<-[:DIRECTED]-(lana:Person {name: 'Lana Wachowski'}),
(actor:Person)-[:ACTED_IN]->(other:Movie)
WITH actor, m, other
WHERE NOT EXISTS((lana)-[:DIRECTED]->(other:Movie)<-[:ACTED_IN]-(actor))
RETURN actor.name , other.title, COUNT(m)
ORDER BY COUNT(m) desc
LIMIT 10
但是,如果我尝试运行下面的查询,我的集合列表中有重复项。
MATCH (actor:Person)-[:ACTED_IN]->(m:Movie)<-[:DIRECTED]-(lana:Person {name: 'Lana Wachowski'}),
(actor:Person)-[:ACTED_IN]->(other:Movie)
WITH actor, m, other
WHERE NOT EXISTS((lana)-[:DIRECTED]->(other:Movie)<-[:ACTED_IN]-(actor))
RETURN DISTINCT actor.name , collect(other.title), COUNT(m)
ORDER BY COUNT(m) desc
LIMIT 10
推荐阅读
- python - 使用 pandas 选择上面有附加行的结果
- spring-boot - kubernetes NGINX - 限速公式
- java - 如何将 SSL 身份验证集成到 android 中的异步方法?
- google-bigquery - 我可以在 GA 中看到 Android 数据,但在 BigQuery 中看不到
- javascript - 如何根据某些属性对javascript数组进行分组?
- javascript - 如何在井字游戏中返回获胜者并停止提示输入?
- python - 如何在这里避免竞争条件
- java - 如何制作具有不可选择的预设选项的 JOptionPane 下拉列表?
- html - 在鼠标悬停在图像上时显示文本
- node.js - NodeJS MongoDB为什么findById()在启动和路由器POST中有效,但在我执行文件时无效