2017-05-29 10 views
0

我在DB中有不同的樹結構。如何用Cypher提取完整的樹木

他們都具有:

  • 一個節點(:模塊)
  • 一些節點(:CATEGORY)
  • 由關係鏈接[:FOLLOWED_BY]

下面是一個其中。

O      O => (:MODULE) 
    |      0 => (:CATEGORY) 
    0      | => [:FOLLOWED_BY] 
    |      
    0  
    | \ 
    0 0 
    |/
    0 
/| \ 
0 0 0 

,我需要恢復數據我面前是這樣的:

[ [nodeA], [nodeB], [nodeC], [nodeD, nodeE], [nodeF], etc ...] 

我試圖將數據與暗號或與我回來(的NodeJS)排序,但每次我失敗了。

//我試圖用我的電腦的電源線掛自己,但我還是失敗了

有沒有誰做過,或者有一個想法的人?

回答

0

如果您有APOC Procedures,有一些path expansion procedures應該是有幫助的。

我建議使用apoc.path.spanningTree(),因爲它使用NODE_GLOBAL唯一性,所以節點永遠只訪問一次,使用最短路徑從您的起始節點。然後,您可以按照路徑的長度對節點進行分組,然後收集它們中的每一個。

這可能是一個很好的起點查詢:

MATCH (m:Module) 
CALL apoc.path.spanningTree(m, {relationshipFilter:'FOLLOWED_BY', labelFilter:'>CATEGORY'}) YIELD path 
WITH m, last(nodes(path)) as node, length(path) as depth 
WITH m, depth, collect(node) as nodesAtDepth 
ORDER BY depth ASC 
RETURN collect(nodesAtDepth) as nodes 
+0

感謝InverseFlacon。 我確信APOC非常有用,也許essentiel,但對於初學者也非常複雜。你是否有博客通過ExpressJs或任何建議開始以良好的秩序告訴我? –

+0

您是否要求提供純Cypher解決方案?請記住,要使用APOC,只需將jar放入'plugins'目錄並重新啓動Neo4j。上面的單個「CALL」行是使用APOC進行查詢的唯一部分,其他所有內容都是Cypher,因此如果您已經習慣了Cypher,則根本不應使用任何複雜的操作。我收錄的鏈接應該讓您瞭解APOC文檔中的相關要點。您也可以搜索APOC文檔以獲取「展開」。 – InverseFalcon