【问题标题】:neo4j cypher: how to change the type of a relationshipneo4j cypher:如何更改关系类型
【发布时间】:2014-05-05 09:48:10
【问题描述】:

我找不到在 Cypher 中更改关系类型的方法。这种操作完全可能吗?如果不是:实现此结果的最佳方法是什么?

【问题讨论】:

  • 如果您使用apoc procedures plugin,您可以简单地使用call apoc.refactor.setType(rel, 'NEW-TYPE') 轻松更改关系类型。它会自动执行您必须手动执行的操作(根据答案)。

标签: neo4j cypher


【解决方案1】:

我最近在使用 Neo4j 4.2.5。

我使用APOC apoc.refactor.setType来设置关系类型。

阅读文档并安装插件。

https://neo4j.com/labs/apoc/4.2/introduction/

【讨论】:

    【解决方案2】:

    我会简单地删除关系并创建一个新关系:

    MATCH (a) - [r:OLD_RELATION] -> (b)
    DELETE r
    CREATE (a) - [:NEW_RELATION] -> (b)
    

    【讨论】:

    • 关系的属性会丢失
    【解决方案3】:

    我在修改的时候使用如下。

    match (from:Label1 { prop: 1 })-[r:RELATIONSHIP]->(to:Label2 { prop: 2 })
    with from, r, to
    create (from)-[:NEW_RELATIONSHIP]->(to)
    with r
    delete r
    

    【讨论】:

      【解决方案4】:

      很遗憾,目前无法直接更改 rel 类型。

      你可以这样做:

      MATCH (n:User {name:"foo"})-[r:REL]->(m:User {name:"bar"})
      CREATE (n)-[r2:NEWREL]->(m)
      // copy properties, if necessary
      SET r2 = r
      WITH r
      DELETE r
      

      【讨论】:

      • 太棒了! (添加WITH 否则查询失败)
      • 优秀的答案。但是,这只会删除关系并返回该关系的ID,并且在添加WITH 子句之前不会显示更新的关系,如上文所述并由@LoveTW 回答。我会给你+1 以获得最快的答案
      【解决方案5】:

      Michael Hunger 的答案是正确的,但在此密码查询中仍然需要with。 当您想在一个密码查询中切换不同的操作时,可以使用WITHhttp://docs.neo4j.org/chunked/stable/query-with.html

      MATCH (n:User {name:"foo"})-[r:REL]->(m:User {name:"bar"})
      CREATE (n)-[r2:NEWREL]->(m)
      SET r2 = r
      WITH r
      DELETE r
      

      【讨论】:

        【解决方案6】:

        您不能,关系的类型是构成性的或必要的,而不是节点标签,节点标签是对节点进行分组的任意包。 (见this q/a for an analogy。)你必须创建新的关系,删除旧的(如果有的话,复制属性)。

        【讨论】:

          猜你喜欢
          • 2015-10-07
          • 2013-04-06
          • 1970-01-01
          • 2012-07-08
          • 1970-01-01
          • 2013-10-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多