0

我开始使用 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……</p>

Neo4j 具有这样做的apoc.refactor.mergeNodes功能,但我不确定如何在 RedisGraph 中实现类似的结果。

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

有什么线索吗?

感谢分享!:D

4

1 回答 1

1

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.

于 2021-07-14T19:20:27.227 回答