【发布时间】:2018-08-19 04:33:32
【问题描述】:
我需要在不创建重复节点的情况下向 Neo4j 数据库添加更多数据。合并应处理此问题,但在使用 CSV 加载时失败。
我已经阅读了几个解决我的问题的方法,但它们不适用于 Neo4j 3.3.3。我用于测试的 CSV 文件很简单:
Kit|sPOS|ePOS
102866|2781761|2783146
102866|2783227|2783836
102866|2783837|2783841
102866|2783842|2783861
102866|2784027|2790759
102866|2790762|2793652
我的 Cypher 查询是:
LOAD CSV WITH HEADERS FROM 'file:///bedupload.csv' AS line
merge (b:BEDNode{sPOS:line.sPOS,ePOS:line.ePOS})
return b
返回是:
无法使用 sPOS 的空属性值合并节点
因此,它正在读取文件,但解释不正确。 CSV 中的 sPOS 没有 NULL 值。
这个带有 create 的 Cypher 查询按预期生成节点:
LOAD CSV WITH HEADERS FROM 'file:///bedupload.csv' AS line
create (b:BEDNode{sPOS:line.sPOS,ePOS:line.ePOS})
return b
如果我没有属性,则按预期生成单个节点:
LOAD CSV WITH HEADERS FROM 'file:///bedupload.csv' AS line
merge (b:BEDNode)
return b
我尝试了各种格式的建议解决方案,但出现相同的 NULL 错误。例如,
LOAD CSV WITH HEADERS FROM 'file:///bedupload.csv' AS line
merge (b:BEDNode{sPOS:line.sPOS})
on create set b.ePOS=line.ePOS
return b
这似乎是 Neo4j 中的一个错误。寻求有关我的错误或解决方法的帮助。
【问题讨论】:
-
我刚刚注意到 CREATE 查询在生成节点时不会创建它们的属性。