Neo4j LOAD CSV检索没有变化,没有记录

时间:2017-02-24 05:41:01

标签: neo4j

我正在开发一个小项目,我将数据存储在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时,我无法执行相同的查询。任何人都可以帮助我。

1 个答案:

答案 0 :(得分:0)

您没有告诉Cypher line.listOfVals应该是一个集合。

因此,我们假设该值是由|分隔的ID列表:

  1. Cypher会将此值视为字符串
  2. 您需要将其拆分并将字符串ID转换为整数
  3. 简单示例:

    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);