2017-05-17 3 views
0

J'essaie de construire des relations entre une liste de sociétés (avec la hiérarchie des employés) qui sont associés dans un écosystème en plus des investisseurs. J'ai 6 colonnes dans mon csv pour: Société, Investisseur, Client (J étiqueté comme une société mais pour le client de relation), CompanyX (X étiqueté comme une société mais pour la relation pour les entreprises partenaires), Employé (pour les employés) et EmployeeL (L pour la hiérarchie).Télécharger csv avec des relations multiples

LOAD CSV WITH HEADERS FROM 'FILE:///ecosystem.csv' AS line 
MERGE (C:Company {Company: line.Company }) 
MERGE (I:Investor {Investor: line.Investor }) 
MERGE (J:Customer {Company: line.Company }) 
MERGE (X:CompanyX {Company: line.Company }) 
MERGE (N:Employee {Employee: line.Employee }) 
MERGE (L:EmployeeL {Employee: line.Employee }) 
MERGE (C)<-[:works_for]-(N) 
MERGE (L)<-[:reports_to]-(N) 
MERGE (J)<-[:Customer]-(C) 
MERGE (X)<-[:Partners]->(C) 
MERGE (C)<-[:Investor]-(I); 

Est-ce que je complique la tâche? Je suis nouveau à Cypher et je ne suis pas sûr que je le fais bien et la dernière fois que j'ai fait un téléchargement semblable à ceci, j'ai dû effacer ma base de données propre. Comment puis-je entrer une valeur nulle pour J/I/C puisque toutes les hiérarchies ne sont pas terminées? Quand il y a une valeur nulle, je ne peux pas télécharger le fichier csv.

+0

Pourquoi fusionnez-vous 3 fois sur la même valeur? 'MERGE (C: Société {Société: line.Company}) MERGE (J: Client {Société: line.Company}) MERGE (X: CompanyX {Société: line.Company})' –

+0

Je ne sais pas comment pour différencier les partenaires, les clients et les entreprises utilisant une seule étiquette en tant que société. J'ai trouvé que lors de la création de relations, si le nom d'une société est à la fois un client ou un partenaire, il crée des noeuds séparés et la relation n'est pas connectée. Suggérez-vous un autre moyen? – AngryAsianMan

+0

Il me semble que vous confondez les relations avec les étiquettes. Essayez de réduire vos étiquettes à ce qui a du sens pour la chose elle-même, et laissez les relations à d'autres choses parler d'elles-mêmes. Par exemple,: La société semble être une bonne étiquette, alors gardez cela, mais: Le client n'a pas vraiment de sens, puisqu'il s'agit juste d'une: Entreprise qui a: Une relation client avec une autre: Société. Et vous n'avez certainement pas besoin de: CompanyX ou: EmployeeL. De plus, les noms de vos propriétés semblent redondants. Pourquoi ne pas avoir «nom» comme propriété commune sur tous ces nœuds? – InverseFalcon

Répondre

0

Si vous avez seulement trois colonnes dans votre csv, je créerais une requête comme ceci:

LOAD CSV WITH HEADERS FROM 'FILE:///ecosystem.csv' AS line 
MERGE (C:Company {name: line.Company }) 
MERGE (I:Investor {name: line.Investor }) 
MERGE (N:Employee {name: line.Employee }) 
MERGE (C)<-[:Investor]-(I) 
MERGE (C)<-[:works_for]-(N) 

Vous devriez éviter d'utiliser les directions birectional comme :works_for et :reports_to. Cochez cette case article.

+0

Merci. Toutes les suggestions sur la façon dont je devrais construire des relations dans mon fichier csv reflètent alors cela dans cypher? Je voudrais construire des relations entre des sociétés telles que des partenariats, des clients, etc. Corrigez-moi si je me trompe mais je pense que vous pouvez insérer une colonne avec le type de relation et le télécharger en utilisant le chiffrement. – AngryAsianMan

+0

il est possible si vous utilisez la bibliothèque apoc avec la procédure comme CALL apoc.create.relationship (person1, 'KNOWS', {clé: valeur, ...}, personne2) –

+0

Merci, je vais donner un coup de feu. Sur une autre note, est-il possible d'avoir plusieurs colonnes d'information sur un nœud de nom? Par exemple, Nom est John Doe, Position est le président des ventes, situé en Californie, etc. Si oui, des suggestions sur la façon de fusionner cette information dans un nœud de nom unique? – AngryAsianMan