2013-11-02 50 views
0

子圖中的唯一路徑這是一種擴展我先前的問題,而我還沒有收到任何答覆尚未被公佈here如何創建使用的Neo4j

我試圖找出如何創建一個圖形像下面 enter image description here

而是我正與

enter image description here

問題結束了,是我看到MERGE的例子是基於標籤和作爲標籤是普遍的,它最終在拾取託運人1的倉庫時創建託運人2,因爲它們具有相同的名稱。在上一篇文章中,我對日期和月份有同樣的問題。

我在Neo4JClient代碼看起來有點像這樣(手打字這裏的例子)

var qry = GraphClient.Cypher 
       .Merge("(whse:Warehouse{ Name: {whseName}})") 
       .OnCreate("whse").Set("whse= {newWhseData}") 
       .With("whse") 
       .Start(new { root = shipper2Node}) 
       .CreateUnique("(root)-[:HAS_WAREHOUSE]->(whse)") 
       .WithParams(new { whseName = newWhse.Name, newWhseData= newWhse}) 
       .Return(whse => whse.Node<Warehouse>()); 
var whseNode = qry.Results.Single(); 

我真的需要確保我不爲同一託運人創建重複的倉庫,因此使用合併在我的代碼,我明白,合併和匹配替換的創造獨特的2.0

我很抱歉,這裏重新張貼在這裏,但我不知道怎麼回事,得到幫助。

由於提前,基蘭

回答

0

你會使用創建唯一的子圖,但你讓不斷髮展的MERGE時與路的工作,我們應該考慮到這一點的好點

類似於:

var qry = GraphClient.Cypher 
      .Start(new { root = shipper2Node}) 
      .CreateUnique("(root)-[:HAS_WAREHOUSE]->(whse Name: {whseName})") 
      .Set("whse= {newWhseData}") 
      .WithParams(new { whseName = newWhse.Name, newWhseData= newWhse}) 
      .Return(whse => whse.Node<Warehouse>()); 
+0

這將如何工作,它會在每次執行查詢時總是用newWhseData覆蓋whse?或者只在創建新節點時才使用set命令。 – Kiran

+0

@Kiran每次都會更新屬性。如果shipper2Node已經存在,那麼如果您可以嘗試使用Warehouse的名稱和shipper2Node的標識符創建合成ID來標識倉庫,則可以繼續使用合併。 – LameCoder