首页 > 解决方案 > 与 UNWIND 合并问题 Neo4j

问题描述

我有一个我在 python 中创建的字典列表。它看起来像这样:

[{name: 'Bob'}, {name: 'Teresa'}, {name: 'Bob'}, {name: 'Teresa'}]

这是我的密码查询,用于获取此列表并合并到 Neo4j 中,我预计只创建 2 个新节点,Bob 和 Teresa 节点。

WITH $batch AS batch
UNWIND batch as ind
MERGE (n:Friend)
SET n += ind

我所看到的是我只看到了 1 个写入 Neo4j 的节点,而且它似乎是列表中的最后一项。在此示例中,Teresa 节点是唯一创建的节点。

我应该如何修复我的查询,以便在完成运行后看到创建的 Bob 和 Teresa 节点?使列表唯一[{name: 'Bob'}, {name: 'Teresa'}]并使用CREATE而不是MERGE代替是更好的做法吗?

标签: pythonneo4jcypher

解决方案


合并name需要一个字段,在这种情况下您需要是唯一的。如果您不提供它,那么它将只创建一个节点并添加最后一个节点的值。

如果name是唯一的属性,您可以如下修改您的代码。

WITH $batch AS batch
UNWIND batch as ind
MERGE (n:Friend{name: ind.name})

如果有更多属性:

WITH $batch AS batch
UNWIND batch as ind
MERGE (n:Friend{name: ind.name})
SET n += ind

推荐阅读