目前我有两种标签类型:
用户在组织中工作。我想在组织发生变化时更新这种关系。我提出了一个不满足我的解决方案。首先,我删除与前一个节点的当前关系,然后再次与新组织创建关系。这是它在RDBMS中的逻辑工作方式,但在图数据库上应该更容易。
MATCH (user:User)
WHERE id(user) = $id
SET user = $props
WITH user
OPTIONAL MATCH (user)-[ro:WORKS_IN]->(organization:Organization)
DELETE ro
WITH user
MATCH (organization:Organization {name: 'Ebay'})
CREATE (user)-[:WORKS_IN]->(organization)
RETURN user , organization
我需要为这个问题找到一个更优雅的解决方案。
答案 0 :(得分:0)
您可以安装APOC procedures并使用图形重构过程apoc.refactor.to
来更改结束节点。文档说:
call apoc.refactor.to(rel, endNode)
:重定向关系以使用new 端节点。
答案 1 :(得分:0)
老实说,我不认为你在这里可以改变以减少冗长。我现在能想到的最多就是从变量和类型中删除:WORKS_IN关系模式(但是只有在可以从a:User节点删除所有:WORKS_IN关系时,假设它们都是:在另一端的组织节点) :
MATCH (user:User)
WHERE id(user) = $id
SET user = $props
WITH user
OPTIONAL MATCH (user)-[ro:WORKS_IN]->()
DELETE ro
WITH user
MATCH (organization:Organization {name: 'Ebay'})
CREATE (user)-[:WORKS_IN]->(organization)
RETURN user , organization