我开始使用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中实现类似的结果。
SET,WITH和DELETE似乎有一种方法,但我不能得到一些语法正确的东西来工作。
有什么线索吗?
感谢分享!:D
发布于 2021-07-15 03:20:27
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重用。
https://stackoverflow.com/questions/68347381
复制相似问题