14

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

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

想到的唯一解决方法是创建具有不同名称的新副本关系,然后删除旧的。

有没有一种简单的方法可以重命名所有这些关系,或者有什么方法可以逃避 Cypher 中的保留关键字?

4

4 回答 4

30

要进行等效的重命名,您可以创建一个新的并删除旧的,如下所示:

match (n1)-[old:`Start`]->(n2)
create (n1)-[new:StartDate]->(n2)
delete old

nb 使用像 `Start` 周围的反引号来转义保留关键字

于 2014-02-20T02:12:43.080 回答
5

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

您可能还需要考虑START在密码查询中使用反引号引用保留字,并保持关系不变:

start n=node(0) match n<-[:`START`]-r return count(r)
于 2012-12-11T10:21:22.990 回答
2
match (n1)-[old:`Start`]->(n2)
create (n1)-[new:StartDate {propName:old.propName, ...}]->(n2)
delete old
于 2019-01-31T18:45:40.703 回答
0

您可以使用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
于 2021-09-26T03:36:51.650 回答