问题描述
在使用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当前不支持设置属性映射。