2014-09-19 2 views
0

J'utilise l'édition de communauté de neo4j 2.1.2.Duplication des nœuds et des relations dans neo4j

Je souhaite répliquer les nœuds et les relations vers un nouveau chemin à partir de l'ancien chemin existant. Considérez que j'ai une hiérarchie.

Société: Google Rue: 5760 W 96th Street Ville: Marco État: FL Pays: Etats-Unis

Pour la première fois, je vais créer une hiérarchie avec 4nodes avec certaines relations. La relation ressemble comme ci-dessous:

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

Et puis je vais créer un autre nœud société appelée comme Yahoo et cette société est d'avoir un autre nom de rue et même ville, état et nom du pays même que Google. Donc maintenant je veux créer un nœud yahoo et un nœud de rue, et je voulais copier la ville, l'état et le pays avec leurs relations avec ce nœud. Donc, je voulais copier les nœuds existants dans mon nouveau chemin.

Comment puis-je le faire?

Mon nouveau nœud ressemble à ceci:

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

Je ne veux pas attacher le noeud Yahoo avec la ville de noeud Google, l'état, les nœuds de pays. (Ces deux chemins présents dans une même base de données)

+0

Je vous conseille de ne pas créer de nœuds dupliqués pour les villes, les états, les pays. Cela n'a aucun sens d'utiliser un graphique db que – ulkas

+0

@Ulkas, oui ici dans l'exemple ci-dessus que j'ai partagé n'a aucun sens mais dans mon cas réel l'exigence est telle que j'ai dupliqué le chemin. – shree11

Répondre

2

Cela ressemble à une façon étrange d'utiliser une base de données graphique, en dupliquant les nœuds, mais si vous exécutez simplement un autre Create il va créer des nœuds en double. La seule chose qui vous empêcherait d'avoir tous ces doublons est n'importe quelles contraintes uniques que vous pourriez avoir configurées.

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

Si Marco existe et a des propriétés et que vous ne voulez pas le recréer à partir de zéro, mais créer un doublon, vous pouvez alors:

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) 

Si vous avez changé d'avis et ne voulez partager chemin commun, vous pouvez utiliser:

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

Et pour éviter beaucoup de doublons vous pouvez changer cela à:

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