2014-09-19 140 views
0

我正在使用neo4j 2.1.2社區版。複製neo4j中的節點和關係

我想將節點和關係複製到現有舊路徑中的新路徑。考慮我有一個層次結構。

公司:谷歌 街道:5760 w^96街 市:馬可 州:FL 國家:美國

這是第一次,我會創建一些關係4nodes一個層次。的關係看起來如下:

Create (Google)-[:located_at]->(Marco)-[:belongs_to]->(FL)-[:present_in]->(US) 

,然後我會創建一個名爲雅虎多了一個企業節點,這家公司有不同的街道名稱和同一個城市,州和國家名稱相同谷歌。

所以現在我想創建一個雅虎節點和街道節點,並且想要複製城市,州和國家節點以及它們與此節點的關係。因此,我希望將現有節點複製到我的新路徑中。

我該怎麼辦?

我的新節點如下:

Company: Yahoo 
Street : 199 Grandview Road 
City : Marco 
Sate : FL 
Country : US 

我不想重視與谷歌節點的城市,州,國家節點雅虎節點。 (這兩條路徑存在於同一個數據庫中)

+0

我建議你不要爲城市,州,國家創建重複節點。它將沒有意義使用圖形db比 – ulkas 2014-09-19 09:07:42

+0

@Ulkas,是在上面的例子中,我已經共享沒有任何意義,但在我的真實情況下,需求是這樣一種方式,我有重複的路徑。 – shree11 2014-09-19 11:13:07

回答

2

這聽起來像使用圖形數據庫的一種奇怪的方式,複製節點,但如果你只是運行另一個Create它會創建重複的節點。唯一會阻止你擁有所有這些副本的是你可能已經設置的任何獨特約束。

CREATE(:Company{name:'Google'})-[:located_at]->(:City{name:'Marco'})-[:belongs_to]->(:State{abbrv:'FL'})-[:present_in]->(:Country{name:'United States'}) 

如果馬可存在且性質和你不想從頭開始重建,但創建一個重複的,那麼你可以:

MATCH (marco:City{name:'Marco'}), (fl:State{abbrv:'FL'}), (us:Country{name:'United States'}) 
CREATE (:Company{name:'Yahoo'})-[:located_at]->(:City{name:marco.name})-[:belongs_to]->(:State{abbrv:fl.abbrv})-[:present_in]->(:Country{name:us.name) 

如果你改變主意,也希望共享常見的路徑,你可以使用:

MATCH (marco:City{name:'Marco'}) 
CREATE (:Company{name:'Yahoo'})-[:located_at]->(macro) 

此外,要防止大量重複的可能需要更改到:

MATCH (m:City { name : 'Marco' }) 
MERGE (:Company { name:'Yahoo' })-[:located_at]->m