Neo4j:一对一的关系更新

时间:2017-05-23 02:19:05

标签: neo4j cypher

目前我有两种标签类型:

  • 用户
  • 组织

用户在组织中工作。我想在组织发生变化时更新这种关系。我提出了一个不满足我的解决方案。首先,我删除与前一个节点的当前关系,然后再次与新组织创建关系。这是它在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

我需要为这个问题找到一个更优雅的解决方案。

2 个答案:

答案 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