2016-08-03 2 views
0

관계 형성 MATCH와 FOREACH를 사용하여 컬렉션 CSV :로드 내가 형태로 정보를 CSV 파일이

Col1,Col2 
A,B;C;D 

I가 사이의 관계를 생성하기 위해 노력하고있어 및 B의 각, C , D. 내 특별한 경우에는 다른 CSV 파일을 가져 와서 B, C, D를 이미 만들었습니다. 따라서 이러한 노드를 만들 필요는 없지만 관계를 형성하기 위해 노드를 얻으려면 노드를 일치시켜야합니다. 사이퍼으로 할 수있는 방법이 있는가

B: {id: 123, name: B} 

:

LOAD CSV WITH HEADERS FROM 'file:///file.csv' AS line 
WITH line 

MERGE (a:Item {name: line.Col1}) 

FOREACH (x IN SPLIT(line.Col2, ';') | 
    MATCH (s:Item {name: x}) 
    CREATE UNIQUE (s)-[:rel]->(a)); 

노드 B, C, D는 하나만 같이, 제 CSV에 여러 특성을 갖는다? 현재 "FOREACH 내부에서 MATCH를 잘못 사용했습니다"라는 오류가 나타납니다. MATCH 대신 MERGE를 사용하면 원하지 않는 새 노드가 생성됩니다.

답변

0

간단한 사용 MERGE 대신 MATCH하십시오 match가 더 복잡한 경우

LOAD CSV WITH HEADERS FROM 'file:///file.csv' AS line 
WITH line 

MERGE (a:Item {name: line.Col1}) 

FOREACH (x IN SPLIT(line.Col2, ';') | 
    MERGE (s:Item {name: x}) 
    MERGE (s)-[:rel]->(a)); 

는, 당신은 첫 번째 선택을 할 수 있으며, 다음에 걸어 :

LOAD CSV WITH HEADERS FROM 'file:///file.csv' AS line 
MERGE (a:Item {name: line.Col1}) 
WITH a, SPLIT(line.Col2, ';') as names 
UNWIND names as x 
MATCH (t:Item {name: x}) 
WITH a, collect(t) as sc 

FOREACH (x IN sc | 
    CREATE UNIQUE (x)-[:rel]->(a)); 
+0

이에서 작동하지 않았다 내 경우에는 일치하는 노드에 여러 속성이 있기 때문에. 이 질문의 누락 된 부분을 반영하기 위해 질문을 편집했습니다. – cannin

+0

@ canann 나는 내 대답을 넓혔다. –