如何使用WHERE和IN更新Neo4j中的属性与LOAD CSV结合使用?

时间:2014-08-04 23:49:46

标签: neo4j cypher

您好假设我有2个数据文件。他们都有2列。像

file1的列A和B(文件中没有真正的标题)内容如下:

1,2

3,4

...

file2的列A'和B(文件中没有真正的标题)内容如下:

5,2

3,3

...

首先,我使用以下代码按file1:

构建A节点,B节点和关系
LOAD CSV FROM 'file:///home/nate/Downloads/file1.csv' AS line 
MERGE (n:A {number: toString(line[0])}) 
WITH line, n 
MERGE (m:B {ID : toString(line[1]), bonus: "YES"}) 
WITH m,n 
MERGE (n)-[:PAYS]->(m)

现在我想将每个B节点的“bonus”属性更改为“NO”,如果B.ID出现在文件的第二列2中。当然如果它们在fisrt之后不存在则添加A'节点添加节点以及B节点和A'节点之间的关系。我试着像这样使用WHERE和IN:

LOAD CSV FROM 'file:///home/nate/Downloads/file2.csv' AS line 
match (b:B) 
where b.ID in({line[1]}) 
set b.bonus = "NO" 
return m

但它不起作用。有任何想法吗?提前

1 个答案:

答案 0 :(得分:3)

据我所知,您应该能够解决几个问题。

首先,我在第二个查询中简化了匹配。下面应该或多或少地追求你所追求的目标。

LOAD CSV FROM "file:/home/nate/Downloads/file2.csv" AS line
MATCH (b:B{ID: line[1]})
SET b.bonus = "NO"

我可以看到的第二个问题是你试图在第二个查询中返回m,但它没有在任何地方定义。也许你想说RETURN b

在导入CSV数据时,您也不需要使用toString功能。 CSV数据本质上已经是字符串格式。