首页 > 解决方案 > 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,所以我不是确定会发生什么。

标签: neo4jcypher

解决方案


推荐阅读