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

时间:2015-03-28 00:56:42

标签: csv neo4j cypher

我有一个包含以下数据的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);

但是barfs用:

  

无效输入'[':预期标识符字符,空格,'|',   长度规格,属性图或']'(第1行,第159列   (抵消: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);

那我该怎么做参考?

3 个答案:

答案 0 :(得分:2)

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

为此使用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)
)

答案 1 :(得分:0)

然而,迈克尔的回答是,我发现我可以做的是指定关系的属性,如下所示:

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显示关系的type属性而不是标签

答案 2 :(得分:0)

这个问题已经过时了,但Mark Needham发表了一篇文章

使用APOC提供了一个非常简单的solution

如下

    public static int scoreWithNumbers(int num1, int num2) {
        if (num1 == num2) { // Fixed scores for equal numbers
            if (num1 == 1 || num1 == 6) { // equal 1s or 6s
                return 10;
            } else { // equal others
                return 8;
            }
        } else {
            // something something return lowest of num1, num2
        }
    }

注意:" YIELD rel"是必不可少的,因此对于返回部分