neo4j - Neo4j MERGE 对非约束属性值的约束违反
问题描述
我遇到的问题类似于这个问题Cypher 'Node Already Exists' issue with MERGE,但看起来我的约束 ( id
) 没有被违反。相反,我收到关于另一个根本不应该成为约束的属性的错误。我正在使用 apoc 连接到 mongo db 并已验证 mongo db 没问题。这是我的查询:
CALL apoc.mongodb.get('mongodb://[HOSTNAME]:[PORT],'dbname','tablename',null,true) YIELD value as elt
MERGE (e:TableElements {id : elt.pid})
ON MATCH SET
e.symbol = elt.sym,
e.electron_cfg = elt.el
ON CREATE SET
e.atomic_number = elt.num,
e.symbol = elt.sym,
e.electron_cfg = elt.el,
e.atomic_weight = elt.weight,
e.name = elt.name;
我收到了这个错误:
Node(1) already exists with label `TableElements` and property `name` = 'HYDROGEN'
除了重复元素的所有问题之外,我怎么可能在我尚未确定为约束的属性上遇到约束违规?我对 MERGE 的理解是它只合并在 merge 子句中指定的属性上,我认为它只包含具有与id
传入的属性匹配的所有节点,elt.pid
并且我已经验证没有任何重复elt.pid
的 s,所以我不是确定会发生什么。
解决方案
推荐阅读
- pandas - 数据框合并创建多列
- python - 如何获取数据框列中每个值的前 n 个值和后 n 个值的平均值
- c# - (C#) 将结构和数字一起添加到字符串中时,数字不显示
- javascript - 如何在 npm 包中拆分库及其插件?
- mongodb - 运行数据库架构迁移的最佳实践
- javascript - 如何使用户在输入字段中键入的内容与数组中的内容完全匹配
- functional-programming - 在 Rascal 中迭代地图
- pytorch - 在张量列表中找到 n 个最小值
- android - 如何将更新发送到移动应用程序(Android 和 IOS)
- bash - 在 Raspberry Pi 4 (Ubuntu 20.04.1) 中运行自定义 bash 脚本以控制 GPIO 的 CPU 使用率较高