我有一组包含重复数据的 CSV 文件,即同一行可能(并且确实)出现在多个文件中。每一行由其中一列 (id) 唯一标识,并且具有相当多的其他列来指示属性以及所需的关系(即要链接到的其他节点的 id)。这些文件都具有相同的格式。
我的问题是,由于文件的大小和数量,我想避免处理已经存在的行 - 我知道只要 id 相同,文件中的行内容就会相同。
如果具有给定 id 的节点不存在,任何密码向导都可以建议如何编写一个查询来创建节点、设置所有属性并创建所有关系,但如果找到这样的节点则完全跳过该操作?我尝试使用 MERGE ON CREATE,大致如下:
LOAD CSV WITH HEADERS FROM "..." AS row
MERGE (f:MyLabel {id:row.uniqueId})
ON CREATE SET f....
WITH f,row
MATCH (otherNode:OtherLabel {id : row.otherNodeId})
MERGE (f) -[:REL1] -> (otherNode)
Run Code Online (Sandbox Code Playgroud)
但不幸的是,这只能应用于不再设置属性,但我无法弄清楚如何跳过关系的合并部分(这里只显示了一个,但还有很多)。
提前致谢!
您可以选择匹配节点,然后跳过WHERE n IS NULL
确保您有索引或约束:MyLabel(id)
LOAD CSV WITH HEADERS FROM "..." AS row
OPTIONAL MATCH (f:MyLabel {id:row.uniqueId})
WHERE f IS NULL
MERGE (f:MyLabel {id:row.uniqueId})
ON CREATE SET f....
WITH f,row
MATCH (otherNode:OtherLabel {id : row.otherNodeId})
MERGE (f) -[:REL1] -> (otherNode)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2853 次 |
| 最近记录: |