Neo4j支持延迟约束

时间:2014-09-05 11:08:08

标签: neo4j cypher

假设对于某些节点,属性在其上定义了唯一约束。

克隆节点时,我们将属性从原始节点复制到克隆节点,然后修改克隆节点上的唯一属性。

但是,neo4j表现出急切的约束评估,并且只要将唯一属性从原始节点复制到克隆节点,它就会失败。

是否有办法将约束评估与交易结束区分开来?

或者一些可以缓解时间问题的解决方法。

用于说明问题的示例密码:

  1. 为属性ID上标记为y的节点创建唯一约束。

    create constraint on (y:y) assert y.id is unique;
    
  2. 创建几个y节点。

    create (y:y{id: 1}) return y;
    create (y:y{id: 2}) return y;
    
  3. 现在,尝试克隆具有最大ID的y节点,并分配新的ID。

    match (y:y) 
    with max(y.id) as maxid
    match (lasty:y{id: maxid})
    unwind range(1, 10) as i
    create (nexty:y)
    set nexty = lasty
    set nexty.id = maxid + i
    return nexty; 
    
  4. 上述密码失败并出现以下错误:

    Node 5368657 already exists with label y and property "id"=[2]
    

1 个答案:

答案 0 :(得分:2)

MEHUL,

将您的查询更改为:

MATCH(y:y)
WITH max(y.id) AS maxid
MATCH (lasty:y { id : maxid})
UNWIND range(1, 10) AS i
CREATE (nexty)
SET nexty = lasty
SET nexty.id = lasty.id + 1
SET nexty :y
RETURN nexty

这将创建没有标签的新节点,传输和更新属性,然后添加标签。

恩典与和平,

吉姆