gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:40:01 24 4
gpt4 key购买 nike

使用 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 创建一个新的 x2. 将属性从 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com