neo4j cypher:如何更改关系类型

Posted

技术标签:

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

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

【问题讨论】:

如果您使用apoc procedures plugin,您可以简单地使用call apoc.refactor.setType(rel, 'NEW-TYPE') 轻松更改关系类型。它会自动执行您必须手动执行的操作(根据答案)。 【参考方案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。 当您想在一个密码查询中切换不同的操作时,可以使用WITH。 http://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。)你必须创建新的关系,删除旧的(如果有的话,复制属性)。

【讨论】:

以上是关于neo4j cypher:如何更改关系类型的主要内容,如果未能解决你的问题,请参考以下文章

Neo4j:如何删除与 cypher 的特定关系?

知识图谱Neo4j Cypher查询语言详解

neo4j cypher - 麻烦制造关系

Neo4j Cypher 复杂查询优化

在 Cypher 中,如果关系不存在,我该如何创建关系;如果确实如此,请更新属性

neo4j cypher 节点可以模糊匹配么