【问题标题】:Changing node reference in RedisGraph relationship更改 RedisGraph 关系中的节点引用
【发布时间】:2021-07-15 03:20:27
【问题描述】:

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

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

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

Bob 弄错了,他没有付钱给 Alice,而是付给 John,他想解决这个问题。

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

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

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

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

有什么线索吗?

感谢分享! :D

【问题讨论】:

    标签: cypher redisgraph


    【解决方案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 重用。

    【讨论】:

    • 谢谢,我已经很接近了,但错过了您认为的一些东西! :+1:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    相关资源
    最近更新 更多