我只有在导入大量节点后才意识到我已经创建了名为 的关系START
,这是一个保留关键字。因此,通过 Cypher 控制台查询数据库总是抱怨保留关键字:
SyntaxException: 保留关键字 "start n=node(0) match n<-[:START]-r return count(r)"
想到的唯一解决方法是创建具有不同名称的新副本关系,然后删除旧的。
有没有一种简单的方法可以重命名所有这些关系,或者有什么方法可以逃避 Cypher 中的保留关键字?
我只有在导入大量节点后才意识到我已经创建了名为 的关系START
,这是一个保留关键字。因此,通过 Cypher 控制台查询数据库总是抱怨保留关键字:
SyntaxException: 保留关键字 "start n=node(0) match n<-[:START]-r return count(r)"
想到的唯一解决方法是创建具有不同名称的新副本关系,然后删除旧的。
有没有一种简单的方法可以重命名所有这些关系,或者有什么方法可以逃避 Cypher 中的保留关键字?
要进行等效的重命名,您可以创建一个新的并删除旧的,如下所示:
match (n1)-[old:`Start`]->(n2)
create (n1)-[new:StartDate]->(n2)
delete old
nb 使用像 `Start` 周围的反引号来转义保留关键字
你说的对。您不能重命名已经存在的关系。您必须遍历所有关系,并行创建新的(包括所有属性),然后删除旧的。
您可能还需要考虑START
在密码查询中使用反引号引用保留字,并保持关系不变:
start n=node(0) match n<-[:`START`]-r return count(r)
match (n1)-[old:`Start`]->(n2)
create (n1)-[new:StartDate {propName:old.propName, ...}]->(n2)
delete old
您可以使用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