如何在Neo4j中重命名关系?

ulk*_*kas 12 rename keyword relationship neo4j cypher

我只是在导入大量节点后才意识到我创建START了一个名为的关系,这是一个保留关键字.通过Cypher控制台查询数据库因此总是抱怨保留的关键字:

语法异常:保留关键字"start n = node(0)match n < - [:START] -r return count(r)"

我想到的唯一解决方法是使用不同的名称创建新的复制关系,然后删除旧的复制关系.

是否有一种简单的方法可以重命名所有这些关系或某种方式来逃避Cypher中的保留关键字?

Job*_*Job 24

要进行相当于重命名的操作,您可以创建一个新的并重命名,如下所示:

match (n1)-[old:`Start`]->(n2)
create (n1)-[new:StartDate]->(n2)
delete old
Run Code Online (Sandbox Code Playgroud)

nb使用"Start"周围的反引号来逃避保留的关键字

  • 这种方法不会保留以前关系的属性 (4认同)
  • Neo4j 2.x的最佳答案,另请注意,如果您想要避免重复,如果再次执行,则可以将"create"替换为"merge". (2认同)

小智 6

您可以使用apoc插件重命名标签和关系。您还可以使用它来选择要重命名的关系子集。例如,下面的查询将仅重命名 Jim 和 Alistair 之间的关系。

MATCH (:Engineer {name: "Jim"})-[rel]->(:Engineer {name: "Alistair"})
WITH collect(rel) AS rels
CALL apoc.refactor.rename.type("COLLEAGUES", "FROLLEAGUES", rels)
YIELD committedOperations
RETURN committedOperations
Run Code Online (Sandbox Code Playgroud)


Jam*_*mes 5

你是对的。您不能重命名已经存在的关系。您必须遍历所有关系,并行创建新关系(包括所有属性),然后删除旧关系。

您可能还需要考虑START在密码查询中用反引号引起来的保留词,并保持它们的关系不变:

start n=node(0) match n<-[:`START`]-r return count(r)
Run Code Online (Sandbox Code Playgroud)