我不知道如何表达这个问题,因为我甚至不知道它的名称,但我会尝试。
可以想象,我的neo4j实例中有以下图形表示和关系:

我想问Neo4j的问题是:什么是电影,only代理-A演员扮演
不过,这是一个简单的例子。在我的例子中,我有数千名演员加入了一名经纪人,还有数千部电影是一名演员可能扮演的角色。
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结果:
电影-C 电影-B 电影-A
这不是我想要的。我感兴趣的是一部只有演员被雇用的电影,而不是其他演员。因此,结果应该是:
电影-A 电影-B
发布于 2015-12-11 22:12:01
在Cypher中,这是非常容易的:)
MATCH (agency:Agency {name:"AgencyA"})<-[:JOINED]-(actor:Actor)-[:ACTED_IN]->(movie:Movie)
RETURN distinct movie.name如果演员可能已多次加入同一机构(因此与同一代理机构有多个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在这里,我们将电影从业人员的总数与机构首先匹配的员工人数进行了比较。
您可以在这里测试它:
http://console.neo4j.org/r/s9t6en
https://stackoverflow.com/questions/34233230
复制相似问题