neo4j - neo4j 匹配两个不同的关系并检索计数,同时避免笛卡尔积
问题描述
所以我有一个数据库,我想在其中检索具有“已审核”关系的结果,在这个结果中,我想检索具有“acted_in”关系的实体,并返回演员人数最多的电影。
这是我写的代码:
MATCH (a:Person)-[r2:REVIEWED]->(movie:Movie)<-[r:ACTED_IN]-(actors:Person)
RETURN movie.title as Movie_name, count(actors) as no_of_cast
ORDER BY no_of_cast DESC
Limit 1
它返回正确的电影名称,但演员的数量是评论者和表演者的笛卡尔积。
我在演员上收集功能后得到的结果是
"The Replacements" ["Brooke Langton", "Keanu Reeves", "Orlando Jones", "Gene Hackman", "Brooke Langton", "Keanu Reeves", "Orlando Jones", "Gene Hackman", "Brooke Langton", "Keanu Reeves", "Orlando Jones", "Gene Hackman"]
它向演员重复该电影节点中存在“审查”关系的次数。
我怎样才能避免这种情况并获得正确的演员人数,即 4。谢谢。
解决方案
您获得多个/重复演员的原因是因为同一部电影正在被不止一个人(评论者)评论。要删除重复项,您可以使用关键字“DISTINCT”。
MATCH (a:Person)-[r2:REVIEWED]->(movie:Movie)<-[r:ACTED_IN]-(actors:Person)
RETURN movie.title as Movie_name, count(distinct actors) as no_of_cast
ORDER BY no_of_cast DESC
结果:
╒═══════════════════╤════════════╕
│"Movie_name" │"no_of_cast"│
╞═══════════════════╪════════════╡
│"The Replacements" │4 │
├───────────────────┼────────────┤
│"Cloud Atlas" │4 │
├───────────────────┼────────────┤
│"The Da Vinci Code"│4 │
├───────────────────┼────────────┤
│"The Birdcage" │3 │
├───────────────────┼────────────┤
│"Unforgiven" │3 │
└───────────────────┴────────────┘
推荐阅读
- php - PHP file_get_contents 获取组合 GET POST 方法的结果
- java - MalformedURLException 除了协议(方案)的正确性之外,不关心 URL 的正确性吗?为什么?
- angular - Angular:具有布尔值的方法与不工作的组件共享
- c++ - 为什么我的简单链表在第一个节点之后不起作用?
- html - Z-index is not working; can't figure out why.
- javascript - Is For...In loop only option to create an object?
- javascript - What is the difference between "(.....);" and "{......}" in react?
- pandas - Is there a way to force spark workers to use a distributed numpy version instead of the one installed on them?
- angular - 在 Angular 7 中-如何禁用 chrome 自动填充和管理密码选择列表
- android - Android双簧管库在声音的开始/结束处点击