0

在 Neo4j 中,使用 Cypher,我想对数字 1 到 14(即quantity1to quantity14)运行以下查询:

LOAD CSV WITH HEADERS FROM '<path>' AS row 
WITH row WHERE row.quantity1 IS NOT NULL
MATCH (m:main {main_id: row.main}) 
MERGE (q:quantity {quantity : row.quantity1}) 
MERGE (m)-[:main_has_quantity]->(q);

该命令的作用:该命令读取 CSV,创建数量节点(如果它不为空且不存在),然后在数量节点与其对应的主节点之间创建关系。我想quantity1通过quantity14CSV 对列执行此操作。

我尝试使用UNWINDFOREACH但两个命令都抛出错误:

LOAD CSV WITH HEADERS FROM '<path>' AS row 
UNWIND range(1,14) as i
WITH row WHERE row.quantity+toString(i) IS NOT NULL 
MATCH (m:main {main_id: row.main}) 
MERGE (q:quantity {quantity : row.quantity+toString(i)}) 
MERGE (m)-[:main_has_quantity]->(q);

我得到了错误:

变量i未定义(第 5 行,第 37 列(偏移量:246))“合并(q:数量 {数量:row.quantity+toString(i)})”

我用FOREACH了代替,UNWIND但那不起作用,因为我不能WITH在里面使用子句FOREACH

如何最好地达到我正在寻找的结果?

PS 我使用的是 Neo4j 社区版。

4

1 回答 1

0

我认为您需要在这里使用方括号才能选择动态属性

LOAD CSV WITH HEADERS FROM '<path>' AS row 
UNWIND range(1,14) as i
WITH row WHERE row['quantity'+toString(i)] IS NOT NULL 
MATCH (m:main {main_id: row.main}) 
MERGE (q:quantity {quantity : row['quantity'+toString(i)]}) 
MERGE (m)-[:main_has_quantity]->(q);
于 2021-11-02T21:00:00.223 回答