修改关系标签

时间:2014-09-18 06:33:33

标签: neo4j

当您在箭头上创建带有标签的关系时。如何在未来的某个时候更改标签而不删除关系?有可能吗? 你还可以在另一个标签中修改一组具有相同标签的关系吗?

编辑 我写这个来创建新的和复制属性

MATCH (m)-[old:INVIA_DATI]->(n)
WHERE ID(m) = 11 AND ID(n) = 13
CREATE (m)-[new:INVIA2{name:old.name}]->(n)
DELETE old
RETURN m, new, n

现在工作,但如果我有4个属性,如名称,颜色,连接器,其他? 谢谢大家!

2 个答案:

答案 0 :(得分:1)

我们在Neo4j的标签属性图数据模型中有LabelRelationship Type的概念。

对于节点上的标签,以下规则适用:

  • Labels允许您通过角色将节点分组在一起。
  • Labels仅适用于节点,节点可以包含零个或多个标签。

对于关系,以下规则适用:

  • Relationship Types仅适用于关系。
  • 一段关系只能有一个Relationship Type
  • Relationship Types无法更改关系,您必须删除 关系并用一个不同类型的新关系替换它。

答案 1 :(得分:1)

你可以创建一个像这样的新关系:

MATCH (m)-[old:OLD_RELATIONSHIP]->(n)
CREATE (m)-[new:NEW_RELATIONSHIP]->(n)
DELETE old
RETURN m, new, n

对于你的例子:

MATCH (m)-[old:INVIA_DATI]->(n)
WHERE ID(m) = 97 AND ID(n) = 115
CREATE (m)-[new:INVIA2]->(n)
DELETE old
RETURN m, new, n

说明:

MATCH (m)-[old:INVIA_DATI]->(n)
WHERE ID(m) = 97 AND ID(n) = 115

这两行分别与ID为97和115的节点匹配,其中(和仅在哪里)它们之间存在INVIA_DATI关系。 m绑定到节点ID为97的节点,n绑定到ID为115的节点,old绑定到该关系。您可以使用您喜欢的任何值,而不是n,m和old。

CREATE (m)-[new:INVIA2]->(n)

此行创建绑定节点mn之间的新关系,其类型为INVIA2,您可以在此处另外设置属性。如果要防止创建重复项,可以使用MERGE而不是create。

DELETE old

这会删除旧的关系。

RETURN m, new, n

返回绑定值。如果您不想这样做,则不必这样做,但在控制台中查看刚刚发生的事情非常方便。

如果你需要设置一个属性,你可以这样做:

CREATE (m)-[new:INVIA2{propname:old.propname}]->(n)

这将使用原始propname属性中的值设置propname关系属性,您可以通过这种方式设置任意数量的属性。