Подтвердить что ты не робот

Добавление отношения к существующим узлам с помощью Cypher

Я впервые опробую Neo4j. Я использую сообщество 2.0-RC1.

Я создал несколько узлов:

MERGE (u:User{username:'admin',password:'admin'})
MERGE (r1:Role{name:'ROLE_ADMIN'})
MERGE (r2:Role{name:'ROLE_WEB_USER'})
MERGE (r3:Role{name:'ROLE_REST_USER'})

и теперь я хочу добавить отношения между узлами. Однако я не хочу удалить существующую базу данных, созданную с помощью script выше, добавить инструкции и запустить ее снова. Я хочу добавить отношения к существующим узлам. Google помог мне найти это:

START n=node(*), m=node(*)  
where has(n.username) and has(m.name) and n.username = 'admin' 
and m.name = 'ROLE_WEB_USER' 
create (n)-[:HAS_ROLE]->(m)

Что работает отлично (хотя я не понимаю весь синтаксис). Тем не менее, я знаю, что это находит любой node с свойством username и любым node с свойством name вместо использования меток, чтобы проверить, что он имеет правильный тип node.

Как я могу сделать то же самое с помощью меток?

4b9b3361

Ответ 1

В Neo4j 2.0 вы можете создавать индексы схемы для своих меток и свойства, которые вы используете для поиска:

CREATE INDEX ON :User(username)
CREATE INDEX ON :Role(name)

Чтобы создать отношения, которые вы можете использовать:

MATCH (u:User {username:'admin'}), (r:Role {name:'ROLE_WEB_USER'})
CREATE (u)-[:HAS_ROLE]->(r)

MATCH будет использовать индекс, если это возможно. Если индекс отсутствует, он будет искать все узлы, несущие метку, и посмотреть, соответствует ли свойство.

N.B. синтаксис выше будет работать только с Neo4j 2.0.0-RC1 и выше.