1

在 RedisGraph 中使用 Cypher/python 有没有办法

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

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

neo4j 有 apoc.refactor.mergeNodes(nodes, options), apoc.refactor.mergeRelationships(rels, options),但这对我没有帮助!:(因为我使用的是 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

有什么方法可以将它组合在单个查询中?

4

1 回答 1

2

我认为这可以在纯 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 目前不支持设置属性映射。

于 2020-09-01T18:08:28.383 回答