2015-04-07 91 views
2

我想編寫一個密碼查詢來獲取節點及其所有傳入和傳出關係。例如,假設我們有節點N,有兩個輸入關係:(I1) - [IR1] - >(N)和(I2) - [IR2] - >(N),以及兩個輸出關係:( N) - [OR1]→(O1)和(N) - [OR2]→(O2)。在neo4j密碼中查找節點及其所有傳入和傳出節點

我希望能產生一個查詢:

{ 
    node: { properties of N }, 
    incoming: [ 
     { relationship: IR1, node: { properties of I1 } }, 
     { relationship: IR2, node: { properties of I2 } } 
    ], 
    outgoing: [ 
     { relationship: OR1, node: { properties of O1 } }, 
     { relationship: OR2, node: { properties of O2 } } 
    ] 
} 

最近暗號詢問我能得到是:

match (node { criterial }) 
match (incoming)-[incomingr]->(node) 
match (node)-[outgoingr]->(outgoing) 
return node, collect(distinct incoming), collect(distinct outgoing) 

但它不包含類型(incomingr)和式(outgoingr )。

返回路徑也不會給我我想要的,因爲它包含關係屬性而不是類型,更不用說它返回許多重複的(節點)副本。

我知道我可以簡單地

return node, incoming, outgoing, type(incomingr), type(outgoingr) 

通過JSON得到的一切,然後過程中得到我想要的東西,但隨着關係的數量增加了返回的數據將增長方式過大,因爲它返回所有傳入路徑和傳出路徑的組合。 它只是不整齊。

回答

4

基於對http://console.neo4j.org標準演示數據集下面的查詢是接近你想要達到的目標:

MATCH (n:Crew) 
WHERE n.name='Morpheus' 
MATCH()-[rin]->(n)-[rout]->() 
WITH n, collect(DISTINCT 
     { relationship:type(rin), 
     node: startNode(rin) 
     }) AS incoming, 
collect(DISTINCT 
     { relationship:type(rout), 
     node: endNode(rout) 
     }) AS outgoing 
RETURN { node: n, incoming: incoming, outgoing: outgoing } AS result 
+0

非常感謝。不知道{JSON}語法。 –

相關問題