2017-05-17 5 views
0

저는 투자자뿐 아니라 생태계에서 함께 파트너가되는 회사 목록 (직원 계층 구조 포함) 간의 관계를 구축하려고합니다. 회사, 투자자, 고객 (J는 회사로 표시되었지만 관계 고객은 고객), CompanyX (X는 회사로 표시되었지만 파트너 회사의 관계는 직원), Employee (직원) 및 EmployeeL L).여러 관계로 CSV 업로드

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); 

나는 이것을 복잡하게 작성합니까? 저는 Cypher에 익숙하지 않고이 작업을 수행하고 있는지 확신 할 수 없으며 데이터베이스 데이터베이스를 지워야하는 것과 비슷한 업로드를 마지막으로 수행했습니다. 또한 모든 계층 구조가 완료되지 않았으므로 J/I/C에 대해 null 값을 입력하는 방법은 무엇입니까? null 값이 있으면 csv를 업로드 할 수 없습니다. 당신은 :works_for:reports_to로 birectional 방향을 사용하지 않아야합니다

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) 

: 당신이 당신의 CSV에서만 세 개의 열이있는 경우

+0

왜 같은 값으로 3 배 병합합니까? 'MERGE (C : Company {회사 : line.Company}) MERGE (J : 고객 {회사 : line.Company}) MERGE (X : CompanyX {회사 : line.Company})' –

+0

어떻게 잘 모르겠습니다. 파트너, 고객 및 회사를 하나의 레이블을 회사로 사용하여 차별화 할 수 있습니다. 관계를 만들 때 회사 이름이 고객 또는 파트너 인 경우 별도의 노드가 만들어지며 관계가 연결되지 않은 것으로 나타났습니다. 다른 방법을 제안합니까? – AngryAsianMan

+0

당신은 라벨과의 관계가 혼란 스럽다는 것을 알게됩니다. 레이블 자체의 범위를 좁혀서 격리되어있는 것으로 이해하고 다른 것들과의 관계가 그 자체로 말하게하십시오. 예를 들어, : 회사는 좋은 레이블처럼 보입니다. 그러나 다음과 같이 유지하십시오. 고객은 실제로는 이해가되지 않습니다. 그리고 CompanyX 또는 EmployeeL은 꼭 필요하지 않습니다. 또한 속성 이름이 중복 된 것처럼 보입니다. 왜 'name'을이 모든 노드의 공통 속성으로 사용하지 않을까요? – InverseFalcon

답변

0

는,이 같은 쿼리를 만들 것입니다. 이 article을 확인하십시오.

+0

감사합니다. 내 CSV 파일에서 관계를 어떻게 구축해야하는지에 대한 제안이 있으면 사이퍼에 반영됩니까? 나는 파트너쉽, 고객 등과 같은 회사들 사이의 관계를 구축하고 싶습니다. 틀렸다고 정정하되 관계 유형으로 열을 삽입하고 사이퍼를 사용하여 업로드 할 수 있다고 생각합니다. – AngryAsianMan

+0

apoc.create.relationship (person1, 'KNOWS', {key : value, ...}, person2)과 같은 프로 시저로 apoc 라이브러리를 사용하면 가능합니다. –

+0

감사합니다. 또 다른 메모에서, 이름 노드에 여러 정보 열을 가질 수 있습니까? 예를 들어 Name은 John Doe이고, Position은 Sales President, California에 있습니다. 그렇다면 단일 이름 노드에서 해당 정보를 병합하는 방법에 대한 제안이 있습니까? – AngryAsianMan