我正在使用neo4j 2.1.2社区版。
我想将节点和关系复制到现有旧路径的新路径。考虑我有一个层次结构。
公司:谷歌 街道:5760 W 96th Street 城市:马可 州:FL 国家:美国
我第一次创建一个包含4个节点和一些关系的层次结构。这种关系如下所示:
Create (Google)-[:located_at]->(Marco)-[:belongs_to]->(FL)-[:present_in]->(US)
然后我将创建另一个名为Yahoo的公司节点,该公司拥有与Google不同的街道名称和相同的城市,州和国家/地区名称。
所以现在我想创建一个yahoo节点和街道节点,并希望将城市,州和国家节点及其关系复制到此节点。所以我想将现有节点复制到我的新路径中。 / p>
我该怎么做?
我的新节点如下所示:
Company: Yahoo
Street : 199 Grandview Road
City : Marco
Sate : FL
Country : US
我不想将yahoo节点与Google节点的城市,州,国家/地区节点相关联。 (这两个路径存在于同一个数据库中)
答案 0 :(得分:2)
使用图形数据库,复制节点听起来很奇怪,但如果只是运行另一个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