RedisGraph:合并节点并移动所有重新安置吗?

问题描述

在使用Cypher / python的RedisGraph中,有一种方法

合并两个节点并将所有关系从旧节点移到新节点?

我怀疑没有纯Cypher解决方案...在这种情况下,什么是等效的原子操作以及如何将其组合以实现MERGE-nodes + rel

neo4j具有apoc.refactor.mergeNodes(节点,选项),apoc.refactor.mergeRelationships(相关,选项),但这对我没有帮助!:(因为我使用的是RedisGraph。

问题是在RG中,我没有较低级别的权限来进行枚举/迭代来以编程方式执行此操作!


这在一个方向上有效,我必须申请->反面

    MATCH (old)-[r:q]->(from_to)
    WHERE old.val = $old
    MATCH (new) WHERE new.val = $new
    MERGE (new)-[nr2:q]->(from_to)
    SET nr2.val = r.val
    DELETE r

是否可以在单个查询中将其组合?

解决方法

我认为这可以通过纯Cypher实现:

MATCH (old {val: 'old'})-[e:E]->(old_to)
MERGE (new {val: 'new'})
CREATE (new)-[e2:E]->(old_to)
SET e2.prop1 = e.prop1,[...]
DELETE e

这里的主要烦恼是必须显式设置所有边缘属性(以及节点属性(如果还要迁移的话)),因为RedisGraph当前不支持设置属性映射。