我在Neo4J中具有以下架构:
简短说明:
我要删除节点“ Helmut”,并与他一起执行以下步骤:
我在neo4j上还很陌生,所以我想知道这是否可以在单个查询中实现,还是需要单独处理。
我希望在某个时候会有很多带有“ ORIGIN”连接的节点。原始连接意味着这是供稿共享。我想知道这对于设置许多状态为“已删除”的节点的速度意味着什么。我将需要在单独的调用中执行此操作(例如,作为MQ进程),还是可以在表单/ URL服务器请求上执行此操作?
如果我删除节点“ Helmut”,而不是删除国家和城市之间的连接,比如说,国家和城市之间的连接是否仍将保留为幻像连接,或者一旦节点消失,它们将被删除吗?
答案 0 :(得分:0)
由于您不知道已删除用户的帖子中有多少共享,因此最好对它们进行批量修改,然后再批量删除。我们可以使用从APOC程序apoc.periodic.iterate()这一点。
CALL apoc.periodic.iterate("
MATCH (d:Doctor {name:${nameToDelete})-[:FEED_ITEM]->()-[:NEXT*0..]->(feedItem)
OPTIONAL MATCH (feedItem)<-[:ORIGIN]-(share)
RETURN feedItem, share",
"SET share.status = 'deleted'
WITH DISTINCT feedItem
DETACH DELETE feedItem", {}) YIELD batches, total, errorMessages
RETURN batches, total, errorMessages
这一次使用默认的batchSize大小为10k的条目(从外部查询流式传输,然后将内部查询应用于该批次)
在同一查询中(在过程调用之后)或在另一个查询中,您都可以对医生进行MATCH和DETACH DELETE删除。
Neo4j不允许悬空关系,必须先删除所有节点关系,然后才能删除该节点,并且DETACH DELETE用于同时删除该节点和节点本身的关系。