neo4j - 使用 Cypher 修改 Neo4j 中的关系链

标签 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 关系 (*) 匹配连接到原始版本的每个副本。我们知道原始节点,因为它本身不是任何东西的副本。然后,对于副本和原始文件之间的每个关系,我们删除它们并直接为原始文件创建一个新的关系。

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

关于neo4j - 使用 Cypher 修改 Neo4j 中的关系链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23745286/

相关文章:

node.js - neo4j 是否有可能限制收集的数据?

Neo4j 密码 : nested case statement

java - Cypher - 通过属性中的字符串聚合节点

python - Python 中的 ipython-cypher : cypher. run.Connection 对象参数

Neo4j 具有最高聚合关系属性的最短路径

neo4j - 通过聚合合并两个 Cypher 语句的输出

Neo4j 通过具有属性过滤器的多个关系的定向路径

neo4j - 在 Cypher 中聚合后返回节点

neo4j - 从 Neo4j 中的现有设置添加唯一节点以及它们之间的关系

neo4j - 是否可以运行具有强一致性的 Neo4j 集群?