首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Neo4j和多项,嵌套关系

Neo4j和多项,嵌套关系
EN

Stack Overflow用户
提问于 2015-12-11 21:59:50
回答 1查看 884关注 0票数 2

我不知道如何表达这个问题,因为我甚至不知道它的名称,但我会尝试。

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

我想问Neo4j的问题是:什么是电影only代理-A演员扮演

不过,这是一个简单的例子。在我的例子中,我有数千名演员加入了一名经纪人,还有数千部电影是一名演员可能扮演的角色。

PS:如果你能告诉我我想做的事情的名称,我也会很感激:)

更新

我可以有可靠的工作。以下是数据集:

代码语言:javascript
复制
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)

以下是查询:

代码语言:javascript
复制
MATCH (agency:Agency {name:"Agency-A"})-[:ACQUIRED]->(actor:Person)<-[:EMPLOYED]-(movie:Movie)
RETURN distinct movie.name

结果:

电影-C 电影-B 电影-A

这不是我想要的。我感兴趣的是一部只有演员被雇用的电影,而不是其他演员。因此,结果应该是:

电影-A 电影-B

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-11 22:12:01

在Cypher中,这是非常容易的:)

代码语言:javascript
复制
MATCH (agency:Agency {name:"AgencyA"})<-[:JOINED]-(actor:Actor)-[:ACTED_IN]->(movie:Movie)
RETURN distinct movie.name

如果演员可能已多次加入同一机构(因此与同一代理机构有多个JOINED关系),则在连接电影之前,您可以区分它们:

代码语言:javascript
复制
MATCH (agency:Agency {name:"AgencyA"})<-[:JOINED]-(actor:Actor)
WITH distinct actor as actor
MATCH (actor)-[:ACTED]->(movie:Movie)
RETURN distinct movie.name

更新

在澄清没有其他人可以在雇用了代理-A人的电影中发挥作用之后,这是一个有用的查询:

代码语言:javascript
复制
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

在这里,我们将电影从业人员的总数与机构首先匹配的员工人数进行了比较。

您可以在这里测试它:

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34233230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档