Совпадение шифров, ГДЕ, УДАЛИТЬ и С в правильном порядке для двух отдельных отношений

#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}