【发布时间】:2019-04-09 09:05:43
【问题描述】:
在电影数据库中,我使用 Cypher 查询在 Person 节点上创建了一个自我关系 (ACTED_WITH)。
MATCH (p1:Person)-[:ACTED_IN]->(m:Movie)
MATCH (p2:Person)-[:ACTED_IN]->(m)
WHERE p2 <> p1
OPTIONAL MATCH (p1)-[r:ACTED_WITH]-(p2)
FOREACH (n IN (CASE WHEN r IS NULL THEN [0] ELSE [] END) |
MERGE (p1)-[:ACTED_WITH]-(p2)
)
我想返回具有 ACTED_WITH 关系且没有重复的电影 (Cloud Atlas) 的所有演员?
这是密码查询,我试过了
MATCH (m)-[:ACTED_IN]-(a1)-[r]-(a2)-[:ACTED_IN]-(m)
WHERE m.title="Cloud Atlas" RETURN a1,a2
查询返回 Tom Hanks 和 Hugo Weaving 两次(可能是由于双向关系?)。
"a1","a2"
{"name":"Tom Hanks","born":1956}, {"name":"Hugo Weaving","born":1960}
{"name":"Hugo Weaving","born":1960}, {"name":"Tom Hanks","born":1956}
预期结果
"a1", "a2"
{"name":"Tom Hanks","born":1956}, {"name":"Hugo Weaving","born":1960}
如何更改我的查询,以便只返回一次 Tom Hanks 和 Hugo Weaving?对正确方向的任何见解都将受到高度赞赏。谢谢。
【问题讨论】:
-
尝试actor之间的有向关系:MATCH (m)-[:ACTED_IN]-(a1)-[r]->(a2)-[:ACTED_IN]-(m) WHERE m.title= 《云图》返回 a1,a2