如何使用Cypher查询从现有关系开始在Neo4j中创建新关系?

时间:2014-05-11 20:21:05

标签: neo4j cypher

是否有一种简单的方法可以在现有的Neo4j中建立新的关系?

从教程中使用的actor-director-movie数据库开始,我想要做的是让图中的所有{(actor1),(actor2)}对节点满足关系:

(actor1) - [:ACTED_IN] - GT;(电影)LT - [:ACTED_IN] - (actor2)

并使用它们来创建一个新的关系,如:

(actor1) - [:ACTED_IN_THE_SAME_MOVIE_AS] - (actor2)

无论方向(我对有向图和无向图都感兴趣)。 有没有办法用简单的Cypher查询来做到这一点?

非常感谢,

STE

2 个答案:

答案 0 :(得分:5)

使用示例影片数据集:

MATCH (actor1:Person)-[:ACTED_IN]->(:Movie)<-[:ACTED_IN]-(actor2:Person)
WITH actor1, actor2
MERGE (actor1)-[:ACTED_IN_THE_SAME_MOVIE_AS]-(actor2)

答案 1 :(得分:2)

我会这样做:

MATCH (actor1)-[:ACTED_IN]->()<-[:ACTED_IN]-(actor2)
CREATE UNIQUE (actor1)-[:ACTED_IN_THE_SAME_MOVIE_AS]-(actor2)

这基本上就是你所说的。关系是单向的(没有办法),但api(Cypher查询或遍历)可以双向读取它们(所以在某些情况下创建它们的方式并不重要)。 要检查您所做的是否正常,您可以运行以下命令:

MATCH (actor1)-[:ACTED_IN_SAME_MOVIE]-(actor2)
RETURN actor1, actor2