graph - Neo4j 和多个项目、嵌套关系

标签 graph neo4j cypher graph-databases

我不知道如何表达这个问题,因为我什至不知道它叫什么,但我会尝试。

您可以想象我的 neo4j 实例中有以下图形表示和关系:

enter image description here

我想问 Neo4j 的问题如下:只有 Agency-A Actor 出演电影是什么?

这只是一个简单的示例。就我而言,我有数千名加入经纪人的 Actor 以及一名 Actor 可能出演的数千部电影。

PS:如果您能告诉我我想做的事情的名称,我也将不胜感激:)

更新

我能够有一些可靠的工作。这是数据集:

CREATE (AgencyA:Agency {name: 'Agency-A'})
CREATE (Actor1:Person {name: 'Actor-1'})
CREATE (Actor2:Person {name: 'Actor-2'})
CREATE (Actor3:Person {name: 'Actor-3'})
CREATE (Actor4:Person {name: 'Actor-4'})
CREATE (Actor5:Person {name: 'Actor-5'})
CREATE 
  (AgencyA)-[:ACQUIRED]->(Actor1), 
  (AgencyA)-[:ACQUIRED]->(Actor3), 
  (AgencyA)-[:ACQUIRED]->(Actor5)

CREATE (MovieA:Movie {name: "Movie-A"})
CREATE (MovieB:Movie {name: "Movie-B"})
CREATE (MovieC:Movie {name: "Movie-C"})

CREATE 
  (MovieA)-[:EMPLOYED]->(Actor1),
  (MovieA)-[:EMPLOYED]->(Actor5),
  (MovieB)-[:EMPLOYED]->(Actor1),
  (MovieB)-[:EMPLOYED]->(Actor3),
  (MovieB)-[:EMPLOYED]->(Actor5),
  (MovieC)-[:EMPLOYED]->(Actor2),
  (MovieC)-[:EMPLOYED]->(Actor5)

这是查询:

MATCH (agency:Agency {name:"Agency-A"})-[:ACQUIRED]->(actor:Person)<-[:EMPLOYED]-(movie:Movie)
RETURN distinct movie.name

结果:

Movie-C

Movie-B

Movie-A

这不是我想要得到的。我感兴趣的是这部电影只聘用了A社 Actor ,没有其他 Actor 。所以,结果应该是:

Movie-A

Movie-B

最佳答案

在 Cypher 中,这非常简单:)

MATCH (agency:Agency {name:"AgencyA"})<-[:JOINED]-(actor:Actor)-[:ACTED_IN]->(movie:Movie)
RETURN distinct movie.name

如果 Actor 可能多次加入同一机构(因此与同一机构有多个 JOINED 关系),您需要在连接电影之前区分它们:

MATCH (agency:Agency {name:"AgencyA"})<-[:JOINED]-(actor:Actor)
WITH distinct actor as actor
MATCH (actor)-[:ACTED]->(movie:Movie)
RETURN distinct movie.name

更新

在澄清没有其他人可以在雇用 A 机构人员的电影中扮演角色后,这是一个有效的查询:

MATCH (agency:Agency { name:"Agency-A" })-[:ACQUIRED]->(actor:Person)<-[:EMPLOYED]-(movie:Movie)
WITH DISTINCT movie, collect(actor) AS actors
MATCH (movie)-[:EMPLOYED]->(allemployees:Person)
WITH movie, actors, count(allemployees) AS c
WHERE c = size(actors)
RETURN movie.name

在这里,我们将电影员工总数与代理机构 A 首先匹配的员工规模进行比较

您可以在这里测试:

http://console.neo4j.org/r/s9t6en

关于graph - Neo4j 和多个项目、嵌套关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34233230/

相关文章:

graph - 查看 .graphml 文件

algorithm - 为什么贝尔曼福特算法允许下降沿?

python - 如何在表示图形的字典上行走并返回元素列表

neo4j - 创建与 py2neo 一起使用的 Neo4j 日期树

java - Neo4j 将两个不同的对象视为一个对象,因为它们扩展相同的父对象

neo4j - 如何限制 Neo4j 中两个节点之间只有一种关系?

neo4j - 在 Neo4j 中使用 Cypher 设置空值

java - Hibernate 中层次结构的高效表示

Neo4j 密码 : transfer all relationships before replacing a node by another

cypher - 匹配可变长度路径,同时限制节点类型