我在Neo4j上构建了这个数据库
我试图找到在基努·里维斯也演过的电影中演过的演员。我的代码是:
MATCH (a:Actor)-[r:ACTS_IN]->(m:Movie)
WHERE (m:Movie)<-[r:ACTS_IN]-(:Actor { name:"Keanu Reeves" })
RETURN a.name
但它不起作用。我是这种语言的新手,我甚至不确定是否应该使用WHERE或WITH或其他内容。
答案 0 :(得分:3)
您的查询在r
和MATCH
子句中使用相同的标识符WHERE
。这意味着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;
此查询应该更快(并从结果中消除Keanu),特别是如果您首先在:Actor(name)
上创建索引:
MATCH (a:Actor)-[:ACTS_IN]->(:Movie)<-[:ACTS_IN]-(:Actor { name:"Keanu Reeves" })
RETURN DISTINCT a.name;
答案 1 :(得分: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)