在Neo4j中使用Cypher修改关系链



我在生产数据库中创建了错误的关系,需要更新关系以纠正问题-就是这样:

我在我的应用程序中有一个函数,允许用户复制一个节点(原始节点)。当用户复制节点时,将在原始节点和副本之间创建关系。复制副本时出现错误。应该从第二个副本创建到第一个原始节点的关系,但它是在副本1和副本2之间创建的:

(Original)-->(Copy1)-->(Copy2)-->(Copy3) ... etc

本应该是:

            (Copy2)
               ^
               |
(Copy3)<--(Original)-->(Copy1)  

如何更新关系链以指向原始关系链?

我做了一个小例子,因为我不知道你的具体数据模型。给定图形数据库中的以下场景:

CREATE (original:Thing)-[:HAS_COPY]->(copy1:Thing)-[:HAS_COPY]->(copy2:Thing)-[:HAS_COPY]->(copy3:Thing)

可以在开始链的节点周围收集这个副本链:

MATCH (copy:Thing)<-[rels:HAS_COPY*]-(original)
WHERE NOT ()-[:HAS_COPY]->(original)
FOREACH (r IN rels | DELETE r)
CREATE (original)-[:HAS_COPY]->(copy)

在这里,我们通过任意数量的HAS_COPY关系(*)匹配连接到原始副本的每个副本。我们知道原始节点,因为它本身不是任何东西的副本。然后,对于副本和原始文件之间的每个关系,我们删除它们,并直接创建一个新的òne到原始文件。

我已经测试了一下,它应该工作得很好,但是请在将它应用到您的生产数据库之前进行测试。

最新更新