load csv 能自动过滤掉已经存在的节点吗?一条条判断节点存不存在太慢了
发布于 1 个月前 作者 feng1990liu 97 次浏览 来自 问答

如题,每天的数据csv个数更新到neo4j,要判断这个节点存不存在,load csv能不能自动过滤掉已经存在的节点,根据唯一约束

2 回复

建议在loadcsv之前进行数据清洗,比如在关系型数据库中清洗,然后导入neo4j.
这样数据出错的概率会小很多,因为数据清洗往往包含数据转换/更新/去重,这些更适合在关系型数据库中做.
另外,判断节点是否存在,存在就更新,不存在就新建,这个用merge就好了.
例子: 批量更新n,n_e节点与他们的watching关系,如果节点/关系存在就更新,不存在就新建

    CALL apoc.periodic.iterate(
    'CALL apoc.load.csv("{filename}") yield map as row return row'
    ,'merge (n:{label} {pid:row.pid}) with *
    merge (n_e:{label_end} {pid:row.pid_end}) with *
    merge (n)-[r:watching]->(n_e) '
    ,'{batchSize:10000, iterateList:true, parallel:true}'
    )
	;

@nonono merge的速度要比create慢一个数量级

回到顶部