2014-09-19 544 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 
相关问题