2015-12-11 8 views
7

現在、console.neo4j.orgのサンプルデータを使用して、階層JSONを出力するクエリを記述しています。Cypherを使用してツリーからネストされた階層JSONを返す

例データは

create (Neo:Crew {name:'Neo'}), (Morpheus:Crew {name: 'Morpheus'}), (Trinity:Crew {name: 'Trinity'}), (Cypher:Crew:Matrix {name: 'Cypher'}), (Smith:Matrix {name: 'Agent Smith'}), (Architect:Matrix {name:'The Architect'}), 
(Neo)-[:KNOWS]->(Morpheus), (Neo)-[:LOVES]->(Trinity), (Morpheus)-[:KNOWS]->(Trinity), 
(Morpheus)-[:KNOWS]->(Cypher), (Cypher)-[:KNOWS]->(Smith), (Smith)-[:CODED_BY]->(Architect) 

を使用して作成された理想的な出力は、私は次のクエリ

MATCH p =(:Crew { name: "Neo" })-[q:KNOWS*0..]-m 
RETURN extract(n IN nodes(p)| n) 

を使用して、これを取得しています、今

name:"Neo" 
children: [ 
    { 
    name: "Morpheus", 
    children: [ 
     {name: "Trinity", children: []} 
     {name: "Cypher", children: [ 
     {name: "Agent Smith", children: []} 
     ]} 
    ] 
    } 
] 
} 

を以下の通りです。

[(0:Crew {name:"Neo"})] 
[(0:Crew {name:"Neo"}), (1:Crew {name:"Morpheus"})] 
[(0:Crew {name:"Neo"}), (1:Crew {name:"Morpheus"}), (2:Crew {name:"Trinity"})] 
[(0:Crew {name:"Neo"}), (1:Crew {name:"Morpheus"}), (3:Crew:Matrix {name:"Cypher"})] 
[(0:Crew {name:"Neo"}), (1:Crew {name:"Morpheus"}), (3:Crew:Matrix {name:"Cypher"}), (4:Matrix {name:"Agent Smith"})] 

これを理解するためのヒントはありますか?ありがとう

答えて

5

neo4j 3.xでは、APOC pluginをneo4jサーバーにインストールした後に、apoc.convert.toTreeプロシージャを呼び出して同様の結果を生成できます。例えば

{ 
     "_id": 127, 
     "_type": "Crew", 
     "name": "Neo", 
     "knows": [ 
     { 
      "_id": 128, 
      "_type": "Crew", 
      "name": "Morpheus", 
      "knows": [ 
      { 
       "_id": 129, 
       "_type": "Crew", 
       "name": "Trinity" 
      }, 
      { 
       "_id": 130, 
       "_type": "Crew:Matrix", 
       "name": "Cypher", 
       "knows": [ 
       { 
        "_id": 131, 
        "_type": "Matrix", 
        "name": "Agent Smith" 
       } 
       ] 
      } 
      ] 
     } 
     ] 
    } 
+0

[APOCレポ](https://github.com/neo4j-contrib:

MATCH p=(n:Crew {name:'Neo'})-[:KNOWS*]->(m) WITH COLLECT(p) AS ps CALL apoc.convert.toTree(ps) yield value RETURN value; 

...このようになり、結果行を返します/ neo4j-apoc-procedures)は、名前の履歴を返します。 – cybersam

+0

はい。私は、この質問のサンプルがマトリックスからのものであるという事実に言及していました。 – flq

+0

これはAPOCプラグインの中で最も強力な機能です(少なくとも私にとっても).Docker-composeを使用する場合、ボリュームを使用する場合、Neo4jイメージ(ドキュメントを参照)を使用してDockerに取り込むのは非常に簡単です。 .jar>:/ plugins、 "build"、次に "up"を入力します。この@cybersamを共有してくれてありがとう、私の人生と自由時間を変えました! –

関連する問題