2014-09-05 50 views
0

假设对于某些节点,属性具有在其上定义的唯一约束。对延迟约束的Neo4j支持

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

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

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

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

为了说明问题的示例暗号:

  1. 创建标注在属性IDŸ节点唯一约束。

    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] 
    

回答

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 

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

恩惠,平安,

吉姆

+0

吉姆,你的建议可以完美运行。填充节点属性后最后添加标签可解决问题。 – Mehul 2014-09-05 16:20:39