#neo4j #cypher
#neo4j #шифр
Вопрос:
Я хочу сопоставить пользователя по идентификатору, удалить свойства ttl из его (необязательного) адреса и получить связанные роли пользователя.
Структура
(user)
/
(address) (role)
Нужно ли мне использовать для этого два запроса? На данный момент я попробовал несколько вариантов и прочитал документы для WHERE
, REMOVE
и WITH
.
Текущее состояние запроса:
MATCH (user:USER) -[:HAS_FIRST_ADDRESS]-> (address:ADDRESS:TTL) WHERE ID(user) = 36
WITH address REMOVE address.ttl REMOVE address:TTL,
(user:USER) -[:HAS_ROLE]-> (role:ROLE) WHERE ID(user) = 36
RETURN {user: user, role: role, address: address}
Я получаю такие ошибки, как
Invalid input 'W': expected whitespace, comment, a relationship pattern or '.' (line 1, column 177 (offset: 176))
Или для
MATCH (user:USER) -[:HAS_FIRST_ADDRESS]-> (address:ADDRESS:TTL) WHERE ID(user) = 3
WITH address REMOVE address.ttl REMOVE address:TTL
MATCH (user:USER) -[:HAS_ROLE]-> (role:ROLE) WHERE ID(user) = 36
RETURN {user: user, role: role, address: address}
ошибка идет:
WITH is required between REMOVE and MATCH (line 1, column 136 (offset: 135))
Чего мне здесь не хватает?
Ответ №1:
Вы можете просто добавить WITH
предложение между REMOVE
и MATCH
, как говорится в сообщении об ошибке:
MATCH (user:USER) -[:HAS_FIRST_ADDRESS]-> (address:ADDRESS:TTL) WHERE ID(user) = 3
WITH address REMOVE address.ttl REMOVE address:TTL
WITH address
MATCH (user:USER) -[:HAS_ROLE]-> (role:ROLE) WHERE ID(user) = 36
RETURN {user: user, role: role, address: address}