You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从CSV文件导入图数据库中不存在的数据?

问题分析与解决方案

你的查询产生重复条目主要有两个原因:

  1. 数据库中已存在的chidori攻击类型是genjutsu,但CSV中对应的类型是ninjutsu,MERGE会因为属性不匹配创建新的Attack节点,导致同名不同类型的攻击节点重复。
  2. 使用MATCH查找Person节点时,若节点不存在(比如naruto、sasuke),该行数据会被直接过滤,无法创建对应的人物节点和关联关系。

以下是修正后的查询,确保仅插入数据库中不存在的节点和关系:

LOAD CSV WITH HEADERS FROM 'file:///xyz.csv' AS row
// 过滤CSV末尾的空字段(因为CSV每行最后有个逗号)
WITH row WHERE row.charecter IS NOT NULL AND row.type IS NOT NULL AND row.name IS NOT NULL
// MERGE Person节点,不存在则创建
MERGE (c:Person {name: row.charecter})
// MERGE Attack节点,基于name和type的组合,不存在则创建
MERGE (a:Attack {name: row.name, type: row.type})
// MERGE关联关系,确保该Attack到Person的关系不存在时才创建
MERGE (a)-[:BELONGS_TO]->(c)

额外说明

如果你的业务逻辑中,攻击名称name是唯一标识(即同名攻击的类型必须一致),那么需要先处理数据冲突:要么修改CSV中kakashi对应的type为genjutsu,要么更新数据库中已有的chidori节点类型为ninjutsu。此时可以调整Attack的MERGE条件,只基于name:

LOAD CSV WITH HEADERS FROM 'file:///xyz.csv' AS row
WITH row WHERE row.charecter IS NOT NULL AND row.type IS NOT NULL AND row.name IS NOT NULL
MERGE (c:Person {name: row.charecter})
MERGE (a:Attack {name: row.name})
// 若Attack节点已存在,更新其type为CSV中的值(可选,根据业务需求)
SET a.type = row.type
MERGE (a)-[:BELONGS_TO]->(c)

内容的提问来源于stack exchange,提问作者Jaison

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 23:42:52