使用Cypher修改Neo4j中的关系链

Gre*_*som 2 neo4j cypher

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

我的应用程序中有一个功能,允许用户复制节点(原始节点).当用户复制节点时,在原始副本和副本之间创建关系.复制副本时出现错误.应该已经创建了从第二个副本回到第一个原始节点的关系,而是在副本1和副本2之间创建了一个关系:

(Original)-->(Copy1)-->(Copy2)-->(Copy3) ... etc
Run Code Online (Sandbox Code Playgroud)

这应该是:

            (Copy2)
               ^
               |
(Copy3)<--(Original)-->(Copy1)  
Run Code Online (Sandbox Code Playgroud)

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

小智 5

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

CREATE (original:Thing)-[:HAS_COPY]->(copy1:Thing)-[:HAS_COPY]->(copy2:Thing)-[:HAS_COPY]->(copy3:Thing)
Run Code Online (Sandbox Code Playgroud)

可以在启动链的节点周围收集此副本链:

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

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

我已对此进行了一些测试,它应该可以正常工作,但请在将其应用到生产数据库之前进行测试.