2016-11-10 74 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 *