2015-01-22 3 views
1

Каков правильный способ использования Create Unique и WHERE IN одновременно? Или более общий способ использования Create Unique для создания как можно большего количества пути из массива реквизитов?Neo4j Создать уникальный + Где в

Я пытался без успеха:

MATCH (node1) WHERE node1.name = "node1" 
CREATE UNIQUE (node1)-[r:`is_tagged`]->(node2:Tag) 
WHERE node2.name IN ["Tag1","Tag2"] 
RETURN r 

Я прыгал этот шифр будет «тег» узел «NODE1» с тегами «Tag1» и «tag2».

ответ

4
create constraint on :Tag(name); 

MATCH (node1:Document) WHERE node1.name = "node1" 
FOREACH (t in ["Tag1","Tag2"] | 
MERGE (node2:Tag {name:t}) 
CREATE|MERGE (node1)-[:is_tagged]->(node2) 
); 

или с размотки

MATCH (node1:Document) WHERE node1.name = "node1" 
UNWIND ["Tag1","Tag2"] as t 
MERGE (node2:Tag {name:t}) 
CREATE|MERGE (node1)-[r:is_tagged]->(node2) 
RETURN r 
+0

Просто любопытство: нужно ли ограничение, или это просто оптимизация? – zaboco

+0

Это решение отвечает на мой вопрос, поскольку это позволяет создавать узел «теги», когда это необходимо. благодаря – Hugo

1

Вы должны сначала соответствовать Tag с, а затем добавить соотношения:

MATCH (node1) WHERE node1.name = "node1" 
WITH node1 
MATCH (node2:Tag) WHERE node2.name IN ["Tag1","Tag2"] 
CREATE UNIQUE node1-[:is_tagged]->node2 
+0

Я думаю, что он, возможно хочет создать теги тоже. Но если ваше решение неверно. –

+0

Да, ваше решение более общее, я не думал о создании новых тегов. – zaboco

Смежные вопросы