2017-02-24 64 views
0

我正在一個小型項目,我將數據存儲在neo4j數據庫中。我想從csv導入數據,並創建與其他類型節點的關係。Neo4j 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 MATCH(i:Image) where i.imageId in line.listofvals 
Create(product)-[:hasImage]->(i); 

此查詢工作不

注:line.listofvals包含的元素

下面的查詢工作空載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

你是什麼意思'不working'和'無法execute'?有些錯誤?並顯示來自csv文件的數據示例以及標題。 –

回答

0

你不告訴Cypher line.listOfVals應該是一個集合。

因此,讓我們假設值是由|分隔的編號列表:

  1. Cypher支架會考慮這個值作爲一個字符串
  2. 你需要把它分解和轉化的字符串ID爲整數

簡單的例子:

WITH "123| 456| 789 " AS listOfVals 
RETURN extract(x IN split(listOfVals, "|") | toInt(trim(x))) AS vals 

-

╒═════════════╕ 
│"vals"  │ 
╞═════════════╡ 
│[123,456,789]│ 
└─────────────┘ 

製造具有看起來像你的負載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); 
+0

它工作併成功將節點插入到數據庫中。萬分感謝 – Chika