我在Neo4j中创建了一个大图,并且有一个空节点,通过我需要删除的图中的1,100万个关系连接。我知道,如果我只是删除节点,我会留下所有挂起的关系,但我试图删除它们是不成功的。我已经尝试了以下CYPHER命令,但它们挂起并且无法完成:
MATCH (n:Label {uid: ''}) DETACH DELETE n;
和
MATCH (n:Label {uid: ''})-[r]-() DELETE r;
我的假设是没有足够的资源来加载内存中的1100万关系子图,以便分离和删除节点。有没有办法循环关系以降低所需的系统资源?
答案 0 :(得分:2)
您可以批量删除关系,然后删除节点
MATCH (n:Label {uid: ''})-[r]-()
WITH r
LIMIT 1000
DELETE r;
如果您连续运行,则会以小批量删除关系。玩限制金额以查看您的运行系统将在资源方面容忍的内容。
答案 1 :(得分:2)
1)您可以使用apoc库中的apoc.periodic.commit
函数:
call apoc.periodic.commit(
'MATCH (n:Label {uid: {uid}})-[r]->()
WITH r LIMIT {limit}
DELETE r
RETURN COUNT(r)', {
limit: 1000,
uid: ...
})
2)您可以删除节点,然后使用apoc.create.node
功能再次创建它:
MATCH (n:Label {uid: 2})
WITH n, {labels: labels(n), properties: properties(n)} AS data
DETACH DELETE n
WITH data
CALL apoc.create.node(data.labels, data.properties) yield node AS newNode
RETURN newNode