如何在 CSV 中指定关系类型?

How to specify relationship type in CSV?

我有一个 CSV 文件,其中包含如下数据:

ID,Name,Role,Project
1,James,Owner,TST
2,Ed,Assistant,TST
3,Jack,Manager,TST

并希望创建与项目的关系在其中指定的人员。我试图这样做:

load csv from 'file:/../x.csv' as line 
match (p:Project {code: line[3]}) 
create (n:Individual {name: line[1]})-[r:line[2]]->(p);

但它呕吐:

Invalid input '[': expected an identifier character, whitespace, '|', a length specification, a property map or ']' (line 1, column 159 (offset: 158))

因为它似乎无法在关系创建中取消引用 line。如果我硬编码它有效:

load csv from 'file:/../x.csv' as line 
match (p:Project {code: line[3]}) 
create (n:Individual {name: line[1]})-[r:WORKSFOR]->(p);

那么我该如何做参考呢?

现在你不能,因为这是结构信息。

为此使用 neo4j-import tool

或像您一样手动指定,或使用此解决方法:

load csv with headers from 'file:/../x.csv' as line 
match (p:Project {code: line.Project}) 
create (n:Individual {name: lineName})
foreach (x in case line.Role when "Owner" then [1] else [] end |
  create (n)-[r:Owner]->(p)
)
foreach (x in case line.Role when "Assistant" then [1] else [] end |
  create (n)-[Assistant]->(p)
)
foreach (x in case line.Role when "Manager" then [1] else [] end |
  create (n)-[r:Manager]->(p)
)

Michael 的回答成立,但是,我发现我 可以 做的是为关系指定一个属性,如下所示:

load csv from 'file:/.../x.csv' as line 
match (p:Project {code: line[3]}) 
create (i:Individual {name: line[1]})-[r:Role { type: line[2] }]->(p)

我可以让 Neo4j 显示关系的类型属性而不是标签

这个问题很老了,但是 Mark Needham

提出了一个 post

使用 APOC

提供了一个非常简单的 solution

如下

load csv with headers from "file:///people.csv" AS row
MERGE (p1:Person {name: row.node1})
MERGE (p2:Person {name: row.node2})

WITH p1, p2, row
CALL apoc.create.relationship(p1, row.relationship, {}, p2) YIELD rel

RETURN rel

注意:"YIELD rel" 是必不可少的,return 部分也是如此