更改 RedisGraph 关系中的节点引用

Changing node reference in RedisGraph relationship

我开始使用 RedisGraph 并在这里得到了一些很好的支持,很高兴有一个围​​绕它的社区:)

我目前正在尝试实现一个基本的目标:将关系移动到不同的节点:

(bob:User {uid: 1})-[p:Paid {amount: 5, date: "Feb 5 2021 10:10:05"}]->(alice:User {uid: 2})

鲍勃错了,他没有付钱给爱丽丝,而是付给约翰,他想解决这个问题。

(bob)-[p]->(john:User {uid: 3})

我必须保留 [p] 的属性,理想情况下我什至会保留相同的 ID…

Neo4j 有 apoc.refactor.mergeNodes 函数可以做到这一点,但我不确定如何在 RedisGraph 中实现类似的结果。

SETWITHDELETE 似乎有一种方法,但我找不到语法正确的方法。

有什么线索吗?

感谢分享! :D

RedisGraph 没有与 mergeNodes 功能等效的功能,也不支持更改现有边的端点。

因此,您需要删除原始边并引入新边:

MATCH (bob:User {uid: 1})-[p:Paid {amount: 5, date: "Feb 5 2021 10:10:05"}]->(alice:User {uid: 2}) WITH bob, p, {amount: p.amount, date: p.date} AS props MATCH (john:User {uid: 3}) DELETE p CREATE (bob)-[p2:Paid]->(john) SET p2=props

如果您的程序知道 属性 值并且可以将它们用作文字,这可以稍微简化:

MATCH (bob:User {uid: 1})-[p:Paid {amount: 5, date: "Feb 5 2021 10:10:05"}]->(alice:User {uid: 2}) DELETE p CREATE (bob)-[p2:Paid {amount: 5, date: "Feb 5 2021 10:10:05"}]->(john)

任何一种方法都会导致新边缘与前一个边缘具有相同的 ID,因为边缘 ID 由 DELETE 释放并立即由 CREATE 重新使用。