【发布时间】:2014-05-05 09:48:10
【问题描述】:
我找不到在 Cypher 中更改关系类型的方法。这种操作完全可能吗?如果不是:实现此结果的最佳方法是什么?
【问题讨论】:
-
如果您使用apoc procedures plugin,您可以简单地使用
call apoc.refactor.setType(rel, 'NEW-TYPE')轻松更改关系类型。它会自动执行您必须手动执行的操作(根据答案)。
我找不到在 Cypher 中更改关系类型的方法。这种操作完全可能吗?如果不是:实现此结果的最佳方法是什么?
【问题讨论】:
call apoc.refactor.setType(rel, 'NEW-TYPE') 轻松更改关系类型。它会自动执行您必须手动执行的操作(根据答案)。
【讨论】:
我会简单地删除关系并创建一个新关系:
MATCH (a) - [r:OLD_RELATION] -> (b)
DELETE r
CREATE (a) - [:NEW_RELATION] -> (b)
【讨论】:
我在修改的时候使用如下。
match (from:Label1 { prop: 1 })-[r:RELATIONSHIP]->(to:Label2 { prop: 2 })
with from, r, to
create (from)-[:NEW_RELATIONSHIP]->(to)
with r
delete r
【讨论】:
很遗憾,目前无法直接更改 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 以获得最快的答案。
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
【讨论】:
您不能,关系的类型是构成性的或必要的,而不是节点标签,节点标签是对节点进行分组的任意包。 (见this q/a for an analogy。)你必须创建新的关系,删除旧的(如果有的话,复制属性)。
【讨论】: