RedisGraph中如何修改关系的关联节点并保留原有属性与ID
RedisGraph 修改关系指向的解决方案
RedisGraph 暂不支持直接修改已有关系的起始/目标节点,也没有内置类似 Neo4j APOC 的重构函数,可通过以下单条 Cypher 语句实现需求,全程自动处理属性复制、旧关系删除,不需要拆分事务:
// 匹配原有错误关系、付款人节点、正确的收款人节点 MATCH (bob:User {uid:1})-[old_p:Paid]->(:User {uid:2}), (john:User {uid:3}) // 创建指向正确收款人的新关系 CREATE (bob)-[new_p:Paid]->(john) // 全量复制原有关系的所有自定义属性 SET new_p = old_p // 可选:业务需要留存原关系ID时打开下面这行 // SET new_p.old_relation_id = id(old_p) // 删除原有错误关系 DELETE old_p // 可选返回结果校验 RETURN id(new_p) AS new_relation_id, new_p AS relation_detail
- 上述语句的
SET new_p = old_p语法会自动复制原有关系的所有自定义属性,不需要手动逐个赋值amount、date等字段 - RedisGraph 的内部关系 ID 为系统自动分配,不支持手动指定,无法完全保留原有关系 ID,如有需要可按注释将旧 ID 存为新关系的自定义属性使用
- 执行语句前请确保
uid=3的 John 节点已经提前创建,否则匹配不到目标节点语句不会生效
内容的提问来源于stack exchange,提问作者vinyll
相关产品推荐
相关产品推荐

