2014-09-05 94 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