将 CSV 数据中的关系加载到 neo4j 数据库中
Loading relationships from CSV data into neo4j db
Neo4j 2.1.7
正在尝试通过我在 CSV 中收到的信息大量连接一堆节点,看起来像:
person_id,book_id,relationship
111,AAA,OWNS
222,BBB,BORROWS
333,AAA,BORROWS
此 CSV 中使用的节点 :Person
和 :Book
已通过 LOAD CSV
和 CREATE
语句成功加载,并且已存在于数据库中。现在,我想在 :Person
和 :Book
之间的关系的 CSV 上方加载这个。这些关系在 CSV 本身中定义。
LOAD CSV WITH HEADERS FROM "file:data.csv" AS row
MATCH (person:Person { personID: row.person_id })
MATCH (book:Book { bookID: row.book_id })
当然,如果我提供特定名称([:OWNS]
、[:BORROWS]
等),下一个 MERGE
命令会起作用,但如您所见,我的关系由传入数据。
但是,我希望 MERGE
中定义的关系不是 "hard-coded" 字符串,而是来自我的 CSV 的第 3 列的数据。大致如下:
MERGE (person)-[row.relationship]->(book)
这可能吗?
PS:我试过上面的语法,也试过-[:row.relationship]->
,都无济于事(语法错误)
我认为加载 CSV 是不可能的。您需要对输入数据和集合做一些小技巧。如果输入 csv 中的关系包含 OWNS
创建一个集合,否则创建一个空集合。对 BORROWS
关系值执行相同的操作。会是这样的...
...
case when row.relationship = "OWNS" then [1] else [] end as owns
case when row.relationship = "BORROWS" then [1] else [] end as borrows
foreach(x in owns | MERGE (person)-[:OWNS]->(book))
foreach(x in borrows | MERGE (person)-[:BORROWS]->(book))
...
Neo4j 2.1.7
正在尝试通过我在 CSV 中收到的信息大量连接一堆节点,看起来像:
person_id,book_id,relationship
111,AAA,OWNS
222,BBB,BORROWS
333,AAA,BORROWS
此 CSV 中使用的节点 :Person
和 :Book
已通过 LOAD CSV
和 CREATE
语句成功加载,并且已存在于数据库中。现在,我想在 :Person
和 :Book
之间的关系的 CSV 上方加载这个。这些关系在 CSV 本身中定义。
LOAD CSV WITH HEADERS FROM "file:data.csv" AS row
MATCH (person:Person { personID: row.person_id })
MATCH (book:Book { bookID: row.book_id })
当然,如果我提供特定名称([:OWNS]
、[:BORROWS]
等),下一个 MERGE
命令会起作用,但如您所见,我的关系由传入数据。
但是,我希望 MERGE
中定义的关系不是 "hard-coded" 字符串,而是来自我的 CSV 的第 3 列的数据。大致如下:
MERGE (person)-[row.relationship]->(book)
这可能吗?
PS:我试过上面的语法,也试过-[:row.relationship]->
,都无济于事(语法错误)
我认为加载 CSV 是不可能的。您需要对输入数据和集合做一些小技巧。如果输入 csv 中的关系包含 OWNS
创建一个集合,否则创建一个空集合。对 BORROWS
关系值执行相同的操作。会是这样的...
...
case when row.relationship = "OWNS" then [1] else [] end as owns
case when row.relationship = "BORROWS" then [1] else [] end as borrows
foreach(x in owns | MERGE (person)-[:OWNS]->(book))
foreach(x in borrows | MERGE (person)-[:BORROWS]->(book))
...