neo4j 使用UNWIND函数从CSV文件创建关系

3bygqnnd  于 2022-11-29  发布在  其他
关注(0)|答案(1)|浏览(139)

我需要在已通过从CSV文件导入关联值创建的节点之间创建关系。该文件包含名为“sensor”的列,其值为传感器名称(传感器_1,sensor_2...),其余的包含相关值。该文件的结构是一个方阵。这将是伟大的,以避免创建自节点关系。我尝试使用apoc.do。但是它引发了很多错误,所以我写下了下面的代码行,试图至少得到关系(包括自节点),但是它不起作用,它只返回传感器节点。这是我的第一个neo4j项目,我卡住了。你能帮助我吗?

LOAD CSV WITH HEADERS FROM 'file:///sensor_corr1.csv' AS row
MATCH (sensor:Sensor {id:toFloat(right(row['sensor'], 1))})
UNWIND [11, 12, 13, 15, 17, 2, 20, 21, 3, 4, 7, 8, 9] AS sensor_id
MATCH (sensor2:Sensor {id:sensor_id})
CALL {
WITH sensor_id, row
MERGE (sensor)-[corr:IS_CORRELATED_WITH {correlation:row['sensor_' + sensor_id]}]->(sensor2)
RETURN corr
}
RETURN sensor, corr

正如在细节中所解释的那样,我想获得所有传感器节点之间的链接,相关值作为链接属性。在最好的情况下,我想知道一种避免创建自节点关系的方法(当我失败时使用apoc.do.)。

63lcw9qa

63lcw9qa1#

它是一个方阵,我需要通过扫描csv行为每个传感器与所有其他传感器建立链接。sample data。我找到了答案:问题出在CALL:

LOAD CSV WITH HEADERS FROM 'file:///sensor_corr1.csv' AS row
UNWIND [11, 12, 13, 15, 17, 2, 20, 21, 3, 4, 7, 8, 9] AS sensor_id
CALL {
WITH sensor_id, row
MATCH (sensor:Sensor {id:toFloat(right(row['sensor'], 1))})
MATCH (sensor2:Sensor {id:sensor_id}) 
WHERE sensor.id <> sensor2.id
MERGE (sensor)-[corr:IS_CORRELATED_WITH {correlation:row['sensor_' 
+ sensor_id]}]->(sensor2)
RETURN sensor, corr
} 
RETURN sensor, corr

相关问题