Cypher - 参与任何顶级类别电影的演员

时间:2017-10-26 05:38:51

标签: neo4j cypher

我开始使用Neo4J并习惯了Cypher。 我的图表包含3种类型的实体:演员,电影,类别

边缘是:

  • 演员参与电影
  • 电影包含主题(电影可能有多个类别)

我能够编写一个显示演员所有电影主题的查询。

图形和查询的演示在neo4j控制台中设置http://console.neo4j.org/?id=sm07j5

现在,我想写一个查询来检索一个actor的所有主题,然后是参与任何这些主题类别的电影的演员:是否可以用一个查询来完成它? 或者我是否必须先在变量中存储顶级类别?

Cypher是否支持查询结果中的变量定义?

1 个答案:

答案 0 :(得分:1)

如果我正确理解你的要求"查询检索演员的顶部类别,然后参与任何这些顶部类别"如果没有这个" 顶级类别"这将是一个简单的答案。

MATCH (Robin: Actor {name: 'Robin Williams'})-[:ACTS_IN]->(m:Movie)-[:IS_ABOUT]->(t:Topic)
WITH t MATCH (t:Topic)<-[:IS_ABOUT]-(r:Movie)<-[:ACTS_IN]-(a:Actor)
RETURN a, COLLECT(t)

以上查询结果:

(2:Actor {name:"Demi Moore"})     [(7:Topic {name:"Teenagers"})]
(1:Actor {name:"Tom Cruise"})     [(7:Topic {name:"Teenagers"})]
(3:Actor {name:"Tom Hanks"})      [(8:Topic {name:"School"})]
(0:Actor {name:"Robin Williams"}) [(8:Topic {name:"School"}), (7:Topic {name:"Teenagers"})]

正如@InverseFalcon所评论的那样,您没有提供有关如何评估和订购类别的任何信息......