【问题标题】:How to create a new relationship in Neo4j, starting from an existing one, using a Cypher query?如何使用 Cypher 查询从现有关系开始在 Neo4j 中创建新关系?
【发布时间】:2014-05-11 20:21:04
【问题描述】:

有没有一种简单的方法可以在 Neo4j 中从现有关系开始创建新关系?

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

(演员1)-[:ACTED_IN]->(电影)

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

(演员1)-[:ACTED_IN_THE_SAME_MOVIE_AS]-(演员2)

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

非常感谢,

sTe

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    使用示例电影数据集:

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

    【讨论】:

    • 在当前版本中,您甚至可以使用 MERGE 离开方向。所以不管方向如何,它实际上只创建一种关系。
    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2022-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多