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:如何更改关系类型的主要内容,如果未能解决你的问题,请参考以下文章