繁体   English   中英

如何在Cypher / Neo4j中使用WHERE子句

[英]How to use WHERE Clause in Cypher/Neo4j

我已经在Neo4j上建立了这个数据库

在此处输入图片说明

我正在寻找在基努·里维斯(Keanu Reeves)也参演过的电影中扮演过的演员。 我的代码是:

MATCH (a:Actor)-[r:ACTS_IN]->(m:Movie)
WHERE (m:Movie)<-[r:ACTS_IN]-(:Actor { name:"Keanu Reeves" })
RETURN a.name

但这是行不通的。 我是这种语言的新手,甚至不确定是否应该使用WHERE或WITH或其他方式。

您的查询在MATCHWHERE子句中使用相同的标识符r 这意味着2个ACTS_IN关系应该是相同的。 因此, a永远是Keanu Reeves的节点。

这种查询形式应返回所有相关的参与者(包括Keanu),但性能可能不高:

MATCH (a:Actor)-[r:ACTS_IN]->(m:Movie)
WHERE (m)<-[:ACTS_IN]-(:Actor { name:"Keanu Reeves" })
RETURN DISTINCT a.name;

此查询应该更快(并从结果中消除Keanu),尤其是如果您首先在:Actor(name)上创建索引:

MATCH (a:Actor)-[:ACTS_IN]->(:Movie)<-[:ACTS_IN]-(:Actor { name:"Keanu Reeves" })
RETURN DISTINCT a.name;

首先:找到基努扮演的电影清单。

第二: WITH基努(Keanu)合作,每部电影都会在那些不是基努的电影中找到其他演员。

第三:返回基努的同事的不同名单,他在电影名单中与他一起工作

match (k:Actor {name: 'Keanu Reeves'})-[r:ACTS_IN]->(m:Movie)
with k,m
match (m)<-[:ACTS_IN]-(colleague:Actor)
where colleague <>  k
return distinct(colleague)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM