如何为Neo4j数据库中的所有节点重命名(去掉旧并添加新的)属性?

xhv8bpkk  于 2022-10-01  发布在  其他
关注(0)|答案(2)|浏览(311)

我的数据库有近50000个节点和近30万个属性。

我能够重命名节点标签,如下所示:

// Rename x Node labels
MATCH (n:OLD_LABEL {id:14})
REMOVE n:OLD_LABEL
SET n:NEW_LABEL

MATCH (n:CLASSIFICATIONSTANDARD)
REMOVE n:CLASSIFICATIONSTANDARD
SET n:Eclass;

但是,当我尝试更改所有节点的属性名称时,neo4j崩溃了。我可以分批运行这个脚本吗,每个1000个?

调用apoc.perio.iterate https://neo4j.com/labs/apoc/4.4/overview/apoc.periodic/apoc.periodic.iterate/

看起来是个不错的选项,但它只允许三个参数,所以我不知道如何运行所有这些代码:

match (t:Eclass) 
SET t.irdicc = t.irdiCc 
REMOVE t.irdiCc
return true;

match (t:Eclass) return t.irdicc;
yjghlzjz

yjghlzjz1#

您可以在该https://neo4j.com/docs/cypher-manual/current/clauses/call-subquery/#subquery-call-in-transactions的事务中使用子查询

如果您计划在Neo4j浏览器中运行,则需要:auto

:auto MATCH (t:Eclass)
CALL {
  WITH t
  SET t.irdicc = t.irdiCc 
  REMOVE t.irdiCc
} IN TRANSACTIONS OF 100 ROWS
yvfmudvl

yvfmudvl2#

解决方案代码:

// Rename property name

CALL apoc.periodic.iterate(
    "MATCH (t:Eclass) RETURN t",
    "SET t.irdicc = t.irdiCc REMOVE t.irdiCc",
    {batchSize: 1000}
)
YIELD batch, operations;

相关问题