如何在Neo4j的DRIVES关系中添加Rating属性?
如何为Neo4j中的DRIVES关系添加Rating属性?
你的问题出在代码里的CREATE ({Rating:row.Rating})这一行——它并没有把Rating属性绑定到DRIVES关系上,而是创建了一个没有标签的独立节点,这就是为什么关系本身没带上Rating属性的原因。
要给DRIVES关系添加Rating属性,你需要在匹配到关系(或者创建关系)的时候,直接把属性赋值给关系本身。这里有两种常用的写法:
1. 统一处理新建/已有关系(推荐)
如果不确定关系是否已经存在,想用MERGE确保关系存在,同时给它设置Rating属性,可以这么写:
LOAD CSV WITH HEADERS FROM 'FILE:///CarToDriverXFER.csv' AS row FIELDTERMINATOR ',' MATCH (c:Cars {carID:row.carID}) MATCH (d:Drivers {driverID:row.driverID}) MERGE (c)-[r:DRIVES]->(d) // 找到已有关系或创建新关系 SET r.Rating = row.Rating // 给关系r设置Rating属性
这个语句会:
- 先匹配对应的Car和Driver节点
- 用
MERGE确保两者之间的DRIVES关系存在 - 最后通过
SET把CSV里的Rating值赋值给这个关系的属性
2. 仅更新已有关系
如果你确定所有Car和Driver之间的DRIVES关系已经存在,只是需要补充Rating属性,可以用MATCH直接定位关系,再设置属性:
LOAD CSV WITH HEADERS FROM 'FILE:///CarToDriverXFER.csv' AS row FIELDTERMINATOR ',' MATCH (c:Cars {carID:row.carID})-[r:DRIVES]->(d:Drivers {driverID:row.driverID}) SET r.Rating = row.Rating
这种写法会跳过那些还没建立DRIVES关系的Car-Driver对,只给已有的关系添加属性。
简单总结:你之前的错误是把属性加到了一个无关的新节点上,而不是目标关系上——只要把属性赋值操作绑定到DRIVES关系变量(比如上面的r)上,就能解决问题啦。
内容的提问来源于stack exchange,提问作者RickenbackerMan
相关产品推荐
相关产品推荐

