neo4j - 使用 cypher 和 neo4j 将节点合并为一个新节点

标签 neo4j

使用 Neo4j - 图形数据库内核 2.0.0-M02 和新的合并功能, 我试图将节点合并到一个新节点中(合并并没有真正合并,而是根据文档绑定(bind)到返回标识符)并删除旧节点。我现在只关心要转移到新节点的属性而不是关系。 我现在有的是下面的密码

merge (n:User {form_id:123})  //I get the nodes with form_id=123 and label User 
with n match p=n  //subject to change to have the in a collection  
create (x) //create a new  node 
foreach(n in nodes(p): set x=n) //properties of n copied over to x
return n,x 

问题 1. 当 foreach 运行时,它为每个 n 创建一个新的 x 2. 将属性从 n 移动到 x 每次都用新的 n 替换所有属性 因此,如果来自合并的第一个 n 节点具有 2 个属性 a、b 和第二个 c、d 在集合 x=n 之后,所有新节点最终都具有 c、d 属性。我知道文档中有说明,所以我的问题是: 有没有办法将 N 个节点的所有属性(可能还有关系)合并到一个新节点中,仅使用密码?

最佳答案

我认为 Cypher 语言目前没有一种语法可以非破坏性地将任何和所有属性从一个节点复制到另一个节点。

不过,我将介绍一种可能与您的情况类似的简单情况的解决方案。假设一些用户节点具有属性 a 和 b,而另一些用户节点具有属性 c 和 d。例如:

  CREATE (:User { id:1,a: 1,b: 2 }),(:User { id:1,c: 3,d: 4 }),
         (:User { id:2,a:10,b:20 }),(:User { id:2,c:30,d:40 });

这就是我们如何将具有相同 ID 的所有用户节点“合并”到一个节点中:

  MATCH (x:User), (y:User)
  WHERE x.id=y.id AND has(x.a) AND has(y.c)
  SET x.c = y.c, x.d = y.d
  DELETE y
  RETURN x

您可以在 neo4j 沙箱中尝试这个:http://console.neo4j.org/

关于neo4j - 使用 cypher 和 neo4j 将节点合并为一个新节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16232421/

相关文章:

csv - Neo4j 中的关系属性

java - 使用密码查询提取 Neo4j 中的子图

Neo4j - 根据关系方向设置不同的属性

scala - 使用 Spark 连接器填充 Neo4j

neo4j - 无法访问在neo4j数据库中使用java创建的节点,neo4j-server.properties问题

neo4j - 空间层插入性能差

spring-data跨店实体管理

neo4j - 丢弃我们正在收集的节点

java - 现在你在 Neo4j 2.0 中创建事务了吗?

Spring Data Neo4j 4 - 找不到类的标识字段