2017-05-17 40 views
0

我試圖建立一個除了投資者以外的生態系統合作在一起的公司名單(與員工層次結構)之間的關係。我的csv中有6列是:公司,投資者,客戶(J標記爲公司,但是關係客戶),CompanyX(X標記爲公司,但是表示合夥公司的關係),員工(僱員)和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輸入一個空值,因爲並不是所有的層次都完成了?當存在空值時,我無法上傳csv。

+0

爲什麼你3x合併在同一個值? MERGE(C:Company {Company:line.Company}) MERGE(J:客戶{公司:line.Company}) MERGE(X:CompanyX {Company:line.Company})' –

+0

我不確定還可以使用單一標籤作爲公司來區分合作夥伴,客戶和公司。我發現在創建關係時,如果公司的名稱既是客戶也是合作伙伴,那麼它會創建單獨的節點,並且關係沒有連接。你有其他建議嗎? – AngryAsianMan

+0

這聽起來讓你感到困惑與標籤的關係。嘗試縮小標籤的範圍,使其獨立於事物本身,然後讓這些關係與其他事物相互對話。例如:公司看起來像一個很好的標籤,所以要保持這一點,但是:客戶沒有什麼意義,因爲這只是一個:與另一個公司有客戶關係的公司。你絕對不需要:CompanyX或:EmployeeL。你的財產名稱似乎也是多餘的。爲什麼不把'名稱'作爲所有這些節點的公共屬性? – InverseFalcon

回答

0

如果你在你的CSV只有三列,我想創建這樣的查詢:

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) 

您應該避免使用birectional方向爲:works_for:reports_to。檢查這article

+0

謝謝。關於如何在我的csv文件中建立關係的任何建議然後在cypher中反映出來?我希望在合作伙伴,客戶等公司之間建立關係。如果我錯了,請糾正我的錯誤,但我認爲您可以插入具有關係類型的列並使用密碼進行上載。 – AngryAsianMan

+0

如果你使用apoc程序庫,如CALL apoc.create.relationship(person1,'KNOWS',{key:value,...},person2) –

+0

謝謝,我會給你一個鏡頭。另一方面,是否有可能在名稱節點上有多列信息?例如,姓名是John Doe,職位是銷售總裁,位於加利福尼亞州等。如果有,關於如何將這些信息合併到一個名稱節點中的建議? – AngryAsianMan