如何在 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 部分也是如此
我有一个 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 部分也是如此