2013-08-12 4 views
0

foreach를 사용하여 노드와 관계를 만들고 싶습니다. 각 m에 대해 m [알고있는 2 개 개의 노드 (P) 생성 :이 방법으로 Neo4j에서 foreach를 사용하는 것이 잘못된 이유는 무엇입니까?

start n=node(1) 
foreach(i in range(1,2): 
     create (m{id:i}) 
     foreach(j in range(1,2): 
       create (p{name:i,id:j}), 
       (m)-[:knows]->(p) 
     ) 
); 

신택스 에러가없는, 그러나 이것은 예상했던 것보다 더 많은 노드를 생성한다. 생성 된 모든 노드는 다음과 같습니다.

==> | Node[27]{id:1}    | 
==> | Node[28]{name:1,id:1}  | 
==> | Node[29]{name:1,id:2}  | 
==> | Node[30]{name:1,id:1}  | 
==> | Node[31]{}     | 
==> | Node[32]{name:1,id:2}  | 
==> | Node[33]{}     | 
==> | Node[34]{id:2}    | 
==> | Node[35]{name:2,id:1}  | 
==> | Node[36]{name:2,id:2}  | 
==> | Node[37]{name:2,id:1}  | 
==> | Node[38]{}     | 
==> | Node[39]{name:2,id:2}  | 
==> | Node[40]{}     | 

이러한 명령으로 노드 (30-33) 및 노드 (37-40)가 어떻게 생성됩니까? 그들 사이의 관계는 다음과 같습니다.

(31)-[:knows]->(30) 
(33)-[:knows]->(32) 
(38)-[:knows]->(37) 
(40)-[:knows]->(39) 

제발 도와주세요. 고마워.

+0

당신이하려는 것은 나에게 분명하지 않습니다! 그러나 foreach 운영자가 생성 작업에 헌신적 인 것처럼 보이지는 않지만 무언가를 변경하는 것만으로도 "문서화되지 않은 기능"을 발견했다고 생각합니다. – bendaizer

+0

동의합니다. 난 그냥 노드와 관계를 생성하는 중첩 된 foreach 문을 사용하고자합니다. 여기서, m (kn)을 생성하고 싶습니다. 각각의 m에 대해 m [Knows]가 많은 노드 p를 만들고 싶습니다. 이것을 달성 할 다른 방법이 있습니까? 감사 –

답변

1

쿼리에 어떤 문제가 있는지 잘 모르겠지만 2.0.0에서 예상대로 작동하는 것 같습니다. 내가 노드

CREATE (n:XX) 
FOREACH (i in range(1,2) | 
    CREATE (m:XX {id:i}), 
    (m)-[:PARENT]->(n) 
    FOREACH (j in range(3,4)| 
     CREATE (p:XX {name:i, id:j}), 
     (m)-[:KNOWS]->(p) 
    ) 
) 
RETURN n--()--() 

이없는 참고 내가 루트로 새 노드를 만들려면이 조금 수정하고, 구문은 1 배부터, 그래서 FOREACH 이제 파이프 |을 사용하여 변경되었습니다. 자신의 예제에서 볼 수있는 것처럼 빈 노드가없는 적절한 노드 만 만들어집니다. 어쩌면이 버그가 수정 된 것일까?

관련 문제