从csv创建图形时排除某些节点

时间:2017-04-06 08:33:01

标签: neo4j cypher

我有两个csv文件,一个包含source_node,destination_node格式的两列,另一个包含节点列表。现在我尝试使用带有

的第一个文件创建图形
var jsonObj = {
  "rx": {
    "vials": [
      {
        "description": "Rx 1",
        "strength": 100,
        "form": "ML",
        "pkg_size": 10,
        "case_size": 1,
        "ndc": "12345-1234-12",
        "covered": true
      }
    ]
  }
};

jsonObj.rx.vials[0].total_units = jsonObj.rx.vials[0].strength * jsonObj.rx.vials[0].pkg_size;

console.log(jsonObj.rx.vials[0].total_units);

但我想创建节点以及节点之间的关系,其中源节点和目标节点都在第二个csv的列中。我尝试使用WHERE作为

load csv with headers from "file:///C:/Users/neo4j_workspace/new_graph_db/import/sample_edges.csv" as table 
merge (a:Node{name:table.destination_node }) 
with table, a 
merge (b:Node{name:table.source_node}) 
with a, b 
merge (a)-[:relates]->(b)

但我知道哪里不能与合并一起使用。我知道关于CASE,但我无法使用它形成正确的查询。我的数据库在开始时是空的。

1 个答案:

答案 0 :(得分:1)

使用您尝试的方法,查询将在您的第一个CSV的所有行与第二个CSV的所有行之间创建一个笛卡尔积。这种方法表现不佳。

相反,我建议单独处理每个文件,首先通过从第一个CSV创建所有节点,然后(在添加索引之后:节点(名称),如果它还没有)处理第二个CSV,按名称与行上的每个节点匹配并合并关系。