2016-11-10 11 views
3

私はのNeo4jのWebブラウザで実行したクエリがある:ブラウザで以前の結果からデータを復元するにはどうすればよいですか?

MATCH p=(z)<-[*]-(a)-[:foo]->(b) WHERE b.value = "bar" return p 

これは、接続されたノードの大規模な数を返していました。これらのノードをすべて(別のインシデントで)削除したようですが、まだ古いクエリの出力があります。ブラウザのコードセクションは、応答データが記載されているいる:

... 
"graph": { 
     "nodes": [ 
      { 
      "id": "1148578", 
      "labels": [ 
       "text" 
      ], 
      "properties": { 
       "value": "bar", 
       "timestamp": 1478747946867 
      } 
      }, 
    ... 

私は古いクエリの出力から、このデータのすべてを再現するための方法はありますか?

答えて

5

これを行うにはapoc.load.jsonを使用できます。このソリューションは、内部ノードIDを保持しないことに注意してください。 APOCは、組み込みのNeo4j機能を拡張するプロシージャライブラリです。

JSONファイル

{"graph": { 
     "nodes": [ 
      { 
      "id": "32496", 
      "labels": [ 
       "Person" 
      ], 
      "properties": { 
       "born": 1967, 
       "name": "Carrie-Anne Moss" 
      } 
      }, 
      { 
      "id": "32505", 
      "labels": [ 
       "Movie" 
      ], 
      "properties": { 
       "tagline": "Evil has its winning ways", 
       "title": "The Devil's Advocate", 
       "released": 1997 
      } 
      }, 
      { 
      "id": "32494", 
      "labels": [ 
       "Movie" 
      ], 
      "properties": { 
       "tagline": "Welcome to the Real World", 
       "title": "The Matrix", 
       "released": 1999 
      } 
      }, 
      { 
      "id": "32495", 
      "labels": [ 
       "Person" 
      ], 
      "properties": { 
       "born": 1964, 
       "name": "Keanu Reeves" 
      } 
      } 
     ], 
     "relationships": [ 
      { 
      "id": "83204", 
      "type": "ACTED_IN", 
      "startNode": "32495", 
      "endNode": "32505", 
      "properties": { 
       "role": "Kevin Lomax" 
      } 
      }, 
      { 
      "id": "83183", 
      "type": "ACTED_IN", 
      "startNode": "32496", 
      "endNode": "32494", 
      "properties": { 
       "role": "Trinity" 
      } 
      }, 
      { 
      "id": "83182", 
      "type": "ACTED_IN", 
      "startNode": "32495", 
      "endNode": "32494", 
      "properties": { 
       "role": "Neo" 
      } 
      } 
     ] 
     } 
    } 
    } 

考える私たちは、このクエリを使用してグラフを再作成することができます

CALL apoc.load.json("https://dl.dropboxusercontent.com/u/67572426/small_movie_graph.json") YIELD value AS row 
WITH row, row.graph.nodes AS nodes 
UNWIND nodes AS node 
CALL apoc.create.node(node.labels, node.properties) YIELD node AS n 
SET n.id = node.id 
WITH row 
UNWIND row.graph.relationships AS rel 
MATCH (a) WHERE a.id = rel.startNode 
MATCH (b) WHERE b.id = rel.endNode 
CALL apoc.create.relationship(a, rel.type, rel.properties, b) YIELD rel AS r 
RETURN *