复制neo4j中的节点和关系

复制neo4j中的节点和关系,neo4j,cypher,Neo4j,Cypher,我正在使用neo4j 2.1.2社区版 我希望将节点和关系从现有的旧路径复制到新路径。考虑我有一个层次结构。< /P> 公司:谷歌 街道:5760 W第96街 城市:马可 州:佛罗里达州 国家:美国 我将第一次创建一个包含4个节点的层次结构,其中包含一些关系。关系如下所示: Create (Google)-[:located_at]->(Marco)-[:belongs_to]->(FL)-[:present_in]->(US) 然后我会再创建一个名为Yahoo的公司节点,这

我正在使用neo4j 2.1.2社区版

我希望将节点和关系从现有的旧路径复制到新路径。考虑我有一个层次结构。< /P> 公司:谷歌 街道:5760 W第96街 城市:马可 州:佛罗里达州 国家:美国

我将第一次创建一个包含4个节点的层次结构,其中包含一些关系。关系如下所示:

Create (Google)-[:located_at]->(Marco)-[:belongs_to]->(FL)-[:present_in]->(US)
然后我会再创建一个名为Yahoo的公司节点,这家公司的街道名称和城市、州和国家名称与Google相同

现在我想创建一个yahoo节点和street节点,并想复制city、state和country节点及其与该节点的关系。因此,这里我想将现有节点复制到我的新路径中

我怎么做

我的新节点如下所示:

Company: Yahoo
Street : 199 Grandview Road
City : Marco
Sate : FL
Country : US
我不想将yahoo节点与Google节点的城市、州和国家节点连接在一起。
(这两条路径存在于同一个数据库中)

使用图形数据库复制节点听起来很奇怪,但如果您只需运行另一个
Create
,它将创建重复的节点。唯一能阻止您拥有所有这些副本的是您可能设置的任何唯一约束

CREATE(:Company{name:'Google'})-[:located_at]->(:City{name:'Marco'})-[:belongs_to]->(:State{abbrv:'FL'})-[:present_in]->(:Country{name:'United States'})
如果Marco存在并具有属性,而您不想从头开始重新创建它,但创建了一个副本,那么您可以:

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

我建议您不要为城市、州和国家创建重复节点。使用图形数据库是没有意义的than@Ulkas,是的,在上面的例子中,我已经分享了没有任何意义,但在我的真实情况下,要求是这样一种方式,我复制了路径。