首页 > 解决方案 > 在neo4j中合并两个子图

问题描述

我有以下两个子图

                      (root1)                    (root2)
                       / | \                      / | \
                      /  |  \                    /  |  \
                     /   |   \                  /   |   \
                   (a1) (a2) (a3)             (b1) (b2) (b3)

我想通过合并以上两个来创建一个新图表

                               (root)
                          /  /  /  \  \  \
                       (a1)(a2)(a3)(b1)(b2)(b3)

有没有办法只替换一棵树中的一个根节点,而不是迭代一棵树的所有子节点,断开当前根节点并连接到新根节点?

标签: neo4j

解决方案


您可以使用apoc.refactor.mergeNodes将节点列表中的节点“合并”到列表中的第一个节点,这基本上包括将所有关系“移动”到第一个节点。您应该阅读可用的强大选项,以获得您想要的结果。

这是一个非常简单的例子。此查询将合并root2root1(覆盖root1与 中的属性同名的所有属性root2),并且本质上将所有属性“移动”root2root1

MATCH (root1), (root2)
WHERE root1.id = 123 AND root2.id = 234
CALL apoc.refactor.mergeNodes([root1, root2], {}) YIELD node
RETURN node

您可以在地图中指定选项{}来修改上述默认行为。


推荐阅读