我正在开发一个小项目,我将数据存储在neo4j数据库中。我想从csv导入数据,还要与其他类型的节点建立关系。
LOAD CSV WITH HEADERS FROM 'file:///sample.csv' AS line
CREATE (product:Product { productId:line.ProductID,
name: line.Item_Name,
desc:line.Item_Description})
WITH product MATCH(i:Image) where i.imageId in line.listofvals
Create(product)-[:hasImage]->(i);
此查询无效
注意:line.listofvals包含元素列表
以下查询在没有LOAD csv
的情况下使用CREATE (product:Product { productId:1,
name: "name",
desc:"desc"})
WITH product MATCH(i:Image) where i.imageId in [100,101]
Create(product)-[:hasImage]->(i);
但是当我使用LOAD CSV时,我无法执行相同的查询。任何人都可以帮助我。
答案 0 :(得分:0)
您没有告诉Cypher line.listOfVals
应该是一个集合。
因此,我们假设该值是由|
分隔的ID列表:
简单示例:
WITH "123| 456| 789 " AS listOfVals
RETURN extract(x IN split(listOfVals, "|") | toInt(trim(x)) ) AS vals
-
╒═════════════╕
│"vals" │
╞═════════════╡
│[123,456,789]│
└─────────────┘
使您的LOAD CSV查询必须如下所示:
LOAD CSV WITH HEADERS FROM 'file:///sample.csv' AS line
CREATE (product:Product { productId:line.ProductID,
name: line.Item_Name,
desc:line.Item_Description})
WITH product,
extract( x IN split(line.listofvals, "|") | toInt(trim(x)) ) AS vals
MATCH(i:Image) where i.imageId IN vals
Create(product)-[:hasImage]->(i);