您好假设我有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
但它不起作用。有任何想法吗?提前
答案 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数据本质上已经是字符串格式。