2014-10-22 124 views
1

我是Neo4j和Graph數據庫的新手。我已經創建了示例數據庫,並嘗試學習的東西。我已經在該節點和連接節點下創建了正常的關係。我有問題可以根據其他關係創建關係。根據其他關係創建關係

例如:如果我採用公司組織示例,那麼只有一個公司的CEO。那家公司有很多員工。像軟件工程師LEADESBY團隊負責人和團隊負責人MANAGEDBY是項目經理。現在支持我想確定誰是項目經理,然後創建從軟件工程師到項目經理的關係,但我不想這樣做。相反,我會考慮稱爲LEADES-> MANAGEDBY是ProjectManager的新關係。那可能嗎 ?

+0

你想連接的節點是什麼? – subvertallchris 2014-10-22 07:23:09

+0

我不想要節點之間的關係。如果我是軟件工程師,我想要虛擬關係,比如誰是我的項目經理。爲此,我想前往LEADESBY去ManagedBY,然後我得到軟件工程師的PM,而不直接在軟件工程師和PM之間建立關係。 – dotnetstep 2014-10-22 07:31:28

回答

2

好了,這裏就是你的暗號所描述的情況:

CREATE (se:SoftwareEngineer {name: "Bob"})-[:LEAD_BY]->(tl:TeamLeader {name: "Mark"}); 

MATCH (tl:TeamLeader {name: "Mark"}) 
CREATE (tl)-[:MANAGED_BY]->(pm:ProjectManager {name: "Gil"}) 

鮑勃的軟件工程師是由團隊負責人馬克領先。 Mark由項目經理「Gil」管理。

從這裏

現在,有解釋你的問題的幾種方法:

我們如何找出誰是項目經理?

您指定如果存在LEAD_BY關係,然後是MANAGED_BY關係,則該人員是PM。所以,不,你不需要創建SoftwareEngineer直接ProjectManager一個新的關係,而不是你只需要遍歷兩個關係,就像這樣:

MATCH (p)-[:LEAD_BY]->(q)-[:MANAGED_BY]->(pm) 
RETURN pm; 

如果你能更具體的(就像使用我的標籤那麼你也可以這樣做:

MATCH (se:SoftwareEngineer)-[:LEAD_BY]->(tl:TeamLead)-[:MANAGED_BY]->(pm:ProjectManager) 
RETURN se, tl, pm; 

這將給你一個所有3級管理關係的完整列表。

通常,只要您可以指定它,就可以使用這些密碼查詢在模式中深度很多的層次進行導航。