在导入了大量节点之后,我才意识到我创建的关系名为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
注意:使用像 `Start` 周围的反引号来转义保留关键字
你是正确的。你不能重命名已经存在的关系。你需要遍历所有关系,并在并行中创建新的关系(包括所有属性),然后删除旧的关系。
你可能还想考虑在cypher查询中用反引号引用保留字START
,并保留原来的关系:
start n=node(0) match n<-[:`START`]-r return count(r)
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
match (n1)-[old:`Start`]->(n2)
create (n1)-[new:StartDate {propName:old.propName, ...}]->(n2)
delete old