2017-02-10 70 views
1

条款我已经建立这个数据库的Neo4j如何使用WHERE在Cypher支架/ Neo4j的

enter image description here

我试图发现,在电影中,基努·里维斯也发挥发挥的演员。我的代码是:

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

但它不起作用。我是新来的这种语言,我甚至不知道我是否应该使用WHERE或WITH或其他。

回答

1

第一:发现基努演过电影列表

二:WITH基努和电影的每一个发现那些不基努电影的其他演员。

三:返回基努的同事的不同列表与他横跨电影

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) 
+0

非常感谢! – vivi11130704

3

查询使用相同的标识符,r名单采取行动,在MATCHWHERE条款。这意味着2 ACTS_IN关系应该是相同的。因此,a将始终是Keanu Reeves的节点。

此表格应返回所有相关者(包括基努),但可能不会很高性能:

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

这个查询应该更快(从结果消除基努),特别是如果您首先在:Actor(name)上创建索引:

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