2014-01-09 5 views
3

я хочу сделать что-то подобное в шифром:Итерация по коллекции с MATCH и CREATE положений

MATCH (n:node) WHERE n.ID = x  //x is an integer value 
FOREACH (num in n.IDs: 
    MATCH (p:node) WHERE p.ID = num 
    CREATE (n)-[:LINK]->(p)) 

где num представляет собой массив целых значений, относящихся к идентификаторам узлов, которые должны быть связаны с узел, сопоставленный в первой строке.

Когда я запускаю этот запрос, я получаю ошибку: Invalid use of MATCH inside FOREACH.

Я нахожусь на ранних стадиях обучения себе как Cypher, так и Neo4j. Как я могу достичь желаемой функции здесь? Или я лаяю неправильное дерево - не могу ли я понять что-то, что делает ненужным для меня это?

ответ

7

Это не допускается, вместо этого использовать MATCH верхнего уровня, как http://gist.neo4j.org/?8332363

MATCH (n:node), (p:node) 
WHERE n.ID = 1 AND p.ID in [2,3,4] 
CREATE (n)-[:LINK]->(p) 
+0

именно то, что я искал, спасибо – drewmoore

+0

Если существует такое число М (обозначает некоторое количество), то, как мы можем достичь р .ID в [2 - M] – GvanJoic

+2

Это должно быть в документации для FOREACH, imho. foreach-then-match - распространенная идиома на многих языках, поэтому было бы здорово, если бы она вызвала, что способ Cypher отличается! –