首页 > 解决方案 > Neo4j 和 Cypher

问题描述

我正在学习 Neo4j 和 Cypher。我如何让它发挥作用,以便答案只是导演的头衔和姓名?该数据库是来自“Graph Academy”的 Neo4j 电影。问题是:“《你所做的事》的导演在哪些(1995 年上映的)电影(以及扮演什么角色)中扮演了角色?”

这是我到目前为止所拥有的:

MATCH (p:Person)->(m:Movie {title: 'That thing you do'})->[:ACTED_IN |DIRECTED] WITH date(m.released = 1995) RETURN m.title as Movie, p.role as Roles

标签: neo4jcypher

解决方案


将这样的复杂查询分解为几个步骤通常很有帮助:

找到电影“你做的事”...

MATCH (thatthingyoudo:Movie {title: "That Thing You Do"}) 
RETURN thatthingyoudo

...找到那部电影的导演

MATCH (thatthingyoudo:Movie {title: "That Thing You Do"})-[:DIRECTED]-(director:Person) 
RETURN director

...查找该导演演过的电影

MATCH (thatthingyoudo:Movie {title: "That Thing You Do"})-[:DIRECTED]-(director:Person)-[:ACTED_IN]-(m:Movie) 
RETURN m

...不关心所有电影,只关心 1995 年的电影

MATCH (thatthingyoudo:Movie {title: "That Thing You Do"})-[:DIRECTED]-(director:Person)-[:ACTED_IN]-(m:Movie {released:1995}) 
RETURN m

...最后,只需提取导演的姓名和电影的标题和角色,也许,

MATCH (thatthingyoudo:Movie {title: "That Thing You Do"})-[:DIRECTED]-(director:Person)-[actedIn:ACTED_IN]-(m:Movie {released:1995}) 
RETURN m.title, director.name, actedIn.roles

推荐阅读