2017-05-29 14 views
0

DBにツリー構造が違っています。Cypherで完全なツリーを順番に抽出する方法

それらのすべてを持っている:

  • 1つのノード(:モジュール)
  • いくつかのノード(:CATEGORY)の関係によってリンクされ
  • [:FOLLOWED_BY]

ここでは1でありますそのうちの。

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

そして私はこのように私の前のデータを復元する必要があります。

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

私はCYPHERまたは私の背中(nodeJs)でデータをソートしようとしましたが、私は毎回失敗しました。

は//私は私のPCの電源コードと自分自身をハングアップしてみましたが、私はまだ

今までそれをやったか、アイデアを持っている誰もがありますが失敗しましたか?

答えて

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を使うためには、 'plugins'ディレクトリにjarを落としてNeo4jを再起動するだけです。上記の単一の 'CALL'行は、APOCを使用するクエリの唯一の部分です。他のすべてはCypherです。既にCypherに慣れていれば、全く複雑ではありません。私が含まれているリンクは、APOCドキュメントの関連するポイントにあなたを連れて来るはずです。また、APOCドキュメントで「展開」を検索することもできます。 – InverseFalcon

関連する問題