2014-10-02 49 views
0

我有問題,查詢,如何讓所有的關係,其中第二點有一個屬性的Neo4j得到更深層次的節點

CREATE (spol:Spoldzielnia { value : 'Poludnie' }) 
CREATE (mT:Home { value : 'Trojanska' }) 
CREATE (mR:Home { value : 'Renesansowa' }) 
CREATE (mK:Home { value : 'Kasandry' }) 
CREATE (pS:Person { value : 'Slawek' }) 
CREATE (pR:Person { value : 'Remek' }) 
CREATE (pW:Person { value : 'Wojtek' }) 
CREATE (pK:Person { value : 'Krzychu' }) 
CREATE (pB:Person { value : 'Bolek' }) 
CREATE (pC:Person { value : 'Czesław' }) 
CREATE (pTT:Person { value : 'Tosiek' }) 
CREATE (pZZ:Person { value : 'Zbychu' }) 
CREATE (pWW:Person { value : 'Wlodek' }) 
CREATE (pFF:Person { value : 'Franko' }) 
CREATE (pMM:Person { value : 'Mietek' }) 
CREATE (i01:Item { value : 'telefon'}) 
CREATE (i02:Item { value : 'komputer'}) 
CREATE (i03:Item { value : 'laptop'}) 
CREATE (i04:Item { value : 'telefon'}) 
CREATE (i05:Item { value : 'komputer'}) 
CREATE (i06:Item { value : 'laptop'}) 
CREATE (mT)-[:HAS]->(spol) 
CREATE (mR)-[:HAS]->(spol) 
CREATE (mK)-[:HAS]->(spol) 
CREATE (pS)-[:HAS]->(mT) 
CREATE (pR)-[:HAS]->(mT) 
CREATE (pW)-[:HAS]->(mT) 
CREATE (pK)-[:HAS]->(mR) 
CREATE (pB)-[:HAS]->(mR) 
CREATE (pC)-[:HAS]->(mR) 
CREATE (pTT)-[:HAS]->(mK) 
CREATE (pZZ)-[:HAS]->(mK) 
CREATE (pWW)-[:HAS]->(mK) 
CREATE (pFF)-[:HAS]->(mK) 
CREATE (pMM)-[:HAS]->(mK) 
CREATE (i01)-[:HAS]->(pS) 
CREATE (i02)-[:HAS]->(pS) 
CREATE (i03)-[:HAS]->(pS) 
CREATE (i04)-[:HAS]->(pR) 
CREATE (i05)-[:HAS]->(pR) 
CREATE (i06)-[:HAS]->(pR) 

我創造這樣的事情

MATCH (sp:Spoldzielnia)<-[r:HAS]-(h:Home)<--(x) WHERE h.value = 'Trojanska' return * 

,但不給我一個就像更深的節點:電話,電腦服務,筆記本電腦相關的人


例子2:

CREATE (spol:Spoldzielnia { value : 'Poludnie' }) 
CREATE (mT:Home { value : 'Trojanska' }) 
CREATE (mR:Home { value : 'Renesansowa' }) 
CREATE (mK:Home { value : 'Kasandry' }) 
CREATE (pS:Person { value : 'Slawek' }) 
CREATE (pR:Person { value : 'Remek' }) 
CREATE (pW:Person { value : 'Wojtek' }) 
CREATE (pK:Person { value : 'Krzychu' }) 
CREATE (pB:Person { value : 'Bolek' }) 
CREATE (pC:Person { value : 'Czesław' }) 
CREATE (pTT:Person { value : 'Tosiek' }) 
CREATE (pZZ:Person { value : 'Zbychu' }) 
CREATE (pWW:Person { value : 'Wlodek' }) 
CREATE (pFF:Person { value : 'Franko' }) 
CREATE (pMM:Person { value : 'Mietek' }) 
CREATE (i01:Item { value : 'telefon'}) 
CREATE (i02:Item { value : 'komputer'}) 
CREATE (i03:Item { value : 'laptop'}) 
CREATE (i04:Item { value : 'telefon'}) 
CREATE (i05:Item { value : 'komputer'}) 
CREATE (i06:Item { value : 'laptop'}) 
CREATE (i07:hardware { value : 'modem'}) 
CREATE (i08:option { value : 'wifi'}) 
CREATE (i09:option { value : 'usb'}) 
CREATE (mT)-[:HAS]->(spol) 
CREATE (mR)-[:HAS]->(spol) 
CREATE (mK)-[:HAS]->(spol) 
CREATE (pS)-[:HAS]->(mT) 
CREATE (pR)-[:HAS]->(mT) 
CREATE (pW)-[:HAS]->(mT) 
CREATE (pK)-[:HAS]->(mR) 
CREATE (pB)-[:HAS]->(mR) 
CREATE (pC)-[:HAS]->(mR) 
CREATE (pTT)-[:HAS]->(mK) 
CREATE (pZZ)-[:HAS]->(mK) 
CREATE (pWW)-[:HAS]->(mK) 
CREATE (pFF)-[:HAS]->(mK) 
CREATE (pMM)-[:HAS]->(mK) 
CREATE (i01)-[:HAS]->(pS) 
CREATE (i02)-[:HAS]->(pS) 
CREATE (i03)-[:HAS]->(pS) 
CREATE (i04)-[:HAS]->(pR) 
CREATE (i05)-[:HAS]->(pR) 
CREATE (i06)-[:HAS]->(pR) 
CREATE (i07)-[:HAS]->(i02) 
CREATE (i08)-[:HAS]->(i07) 
CREATE (i09)-[:HAS]->(i06) 

回答

0

你只需要讓你的查詢去一個有關係的進一步跳,像這樣:

MATCH (sp:Spoldzielnia)<-[r:HAS]-(h:Home)<--(p:Person)<-[r2:HAS]-(item:Item) 
WHERE h.value = 'Trojanska' 
return item; 

這將返回:

+----------------------------+ 
| item      | 
+----------------------------+ 
| Node[20]{value:"laptop"} | 
| Node[19]{value:"komputer"} | 
| Node[18]{value:"telefon"} | 
| Node[17]{value:"laptop"} | 
| Node[16]{value:"komputer"} | 
| Node[15]{value:"telefon"} | 
+----------------------------+ 

注意儘管這Person之間的HAS關係, Item倒退;你已經建模Item有一個Person時,它應該可能是另一種方式。 :)

+0

感謝,但不正是我想要的,因爲我不知道最後一類節點,我不知道有多深位於 例如2清楚地表明我的意思 我想要的是一個所有節點與'Trojanska'和所有更深層的節點相關,無論它們的深度如何 – 2014-10-02 18:56:06

+0

這個MATCH p =(sp:Spoldzielnia)< - [r:HAS] - (h:Home {value:「Trojanska」})< - [:HAS *] - (x)RETURN p',但要注意無限比賽。請參閱http://console.neo4j.org/r/e9x4ep。這是一個奇怪的模型,但。 – JohnMark13 2014-10-02 20:18:17