首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回只有一个指定关系的节点

返回只有一个指定关系的节点
EN

Stack Overflow用户
提问于 2021-11-28 14:09:39
回答 4查看 34关注 0票数 0

我有一个这样的图表:

我想要做的是返回演员,这些演员只在一部指定的电影中扮演。例如,如果我传递一个钢铁侠2 id,它应该只返回Robert Downey。Scarlett Johansson被跳过,因为她已经出演了3部电影,而且她还有一段"IS_FRIEND_WITH“的关系。我写的这段代码,返回在id 11 in this case电影中扮演的所有演员

代码语言:javascript
复制
MATCH (a)
WHERE ID(a) = 11
MATCH (b:Actor)-[:ACTED_IN]-(a:Movie)
RETURN b

如果钢铁侠2的Id = 11,它将返回斯嘉丽和罗伯特·唐尼。我只想让它只返回罗伯特·唐尼。

EN

回答 4

Stack Overflow用户

发布于 2021-11-28 18:51:12

您需要应用另一个筛选器,以仅选择具有单个ACTED_IN关系的节点。

代码语言:javascript
复制
MATCH (a:Movie)
WHERE ID(a) = 11
MATCH (b:Actor)-[:ACTED_IN]-(a)
// apply filter for nodes that have only a single ACTED_IN relationship
WITH b, size((b)-[:ACTED_IN]->()) as number_of_movies
WHERE number_of_movies = 1
RETURN b
票数 0
EN

Stack Overflow用户

发布于 2021-11-28 21:00:16

我会这么做的

代码语言:javascript
复制
WITH 11 AS movieId
MATCH (a:Actor)
WHERE [(a)-[:ACTED_IN]->(m:Movie) | id(m)] = [movieId]
RETURN a
票数 0
EN

Stack Overflow用户

发布于 2021-12-01 21:16:27

作为其他答案的替代方案,您可以这样做

代码语言:javascript
复制
MATCH (a:Movie)
WHERE ID(a) = 11
MATCH (b:Actor)-[:ACTED_IN]->(a)
// Make sure there are no ACTED_IN relationships apart from the one to a
AND NOT (:Movie)<-[:ACTED_IN]-(b)-[:ACTED_IN]->(a)
RETURN b

这可能有一个次要的优点,因为它不会首先收集参与者的所有:ACTED_IN关系,而是可以在找到其他关系时立即退出查询。

如果您还想删除具有IS_FRIENDS_WITH关系的查询,则可以将查询修改为

代码语言:javascript
复制
MATCH (a:Movie)
WHERE ID(a) = 11
MATCH (b:Actor)-[:ACTED_IN]->(a)
// Make sure no other relationships exist
AND NOT ()<-[]-(b)-[:ACTED_IN]->(a)
RETURN b
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70144182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档