Cypher查询从一个节点获取所有关系,并将它们附加到另一个节点

Joh*_*all 3 neo4j cypher

我的问题是..给定两个节点,节点A和节点B,有一个密码查询,它从节点A中删除所有关系,并将它们连接到节点B,以便之前连接到节点A的所有节点都是现在附加到节点B?

我确信这样的查询有很多用例,但我的用例是合并多个社交网络登录:

鉴于我有一个成员帐户(member1)使用谷歌作为登录提供商我有一个单独的成员帐户(member2)使用Facebook作为登录提供商当member1尝试连接到member2用作相同的Facebook帐户登录提供者和member1请求合并(合并帐户)和member2确认合并然后成员member1和member2的帐户将合并一个成员将使用谷歌和Facebook作为登录提供者.

什么是cypher查询来执行此操作?

Fyl*_*mTM 5

编辑:现在有方法,动态指定关系类型.因此,下面的解决方法仅限于具有相同类型且没有属性的关系.


让我们创建一些数据:

CREATE (n1:Node1)
CREATE (n2:Node2)
CREATE (target1:Target)
CREATE (target2:Target)
CREATE (target3:Target)
CREATE (n1)-[:REL]->(target1)
CREATE (n1)-[:REL]->(target2)
CREATE (n1)-[:REL]->(target3);
Run Code Online (Sandbox Code Playgroud)

我们现在有这样的数据:

数据

现在,我们希望从"移动"的关系Node1,以Node2

查询:

MATCH (n1:Node1)-[r:REL]->(target)
MATCH (n2:Node2)
CREATE (n2)-[:REL]->(target)
DELETE r
Run Code Online (Sandbox Code Playgroud)

结果是:

结果

我们基本上做的是:

  • 从一条路走下来
  • 创建与其他节点的关系
  • 删除原始节点的关系