Neo4j:如何基于不同属性创建同名的多条关系边?
解决Neo4j同节点间创建多条同名关系的问题
你的问题核心出在MERGE语句的使用上——MERGE的逻辑是:如果指定的模式(这里是(e)-[r:INCLUDED_IN]->(s))已经存在,就匹配这个已有的关系,然后用SET更新它的属性;只有当模式不存在时才会新建关系。所以第二行数据进来时,因为两个节点和INCLUDED_IN关系已经存在,就直接覆盖了第一条的属性,而不是新建第二条关系。
要实现同节点间多条同名关系的需求,你需要把关系部分的MERGE改成CREATE,同时节点部分用MERGE来避免重复创建节点(因为两行数据的节点属性完全一致)。正确的Cypher导入语句应该是这样:
// 匹配或创建服务节点 MERGE (e:Service {service: aloc.service}) // 匹配或创建起止节点(可根据实际需求调整节点标签) MERGE (s:StartStop {start: aloc.start, stop: aloc.stop}) // 为每行数据创建一条新的INCLUDED_IN关系 CREATE (e)-[r:INCLUDED_IN]->(s) SET r.Usage = aloc.usage, r.Code = aloc.code
这段代码的逻辑:
- 节点用MERGE:确保相同service的Service节点、相同start+stop的StartStop节点只会被创建一次,不会重复生成节点。
- 关系用CREATE:每行CSV数据都会生成一条新的INCLUDED_IN关系,各自带上对应的usage和code属性,这样两个节点之间就会有两条独立的关系了。
如果你的节点标签不是Service和StartStop,记得改成你实际需要的标签名称。
内容的提问来源于stack exchange,提问作者Vaishali Nagpure
相关产品推荐
相关产品推荐

