Я хочу написать запрос, который;
- обновляет отношение между двумя узлами, если один уже существует, или
- , если отношения не существует, создают один между двумя узлами.
В действительности это означает, что один пользователь программы может «заблокировать» другого пользователя программы, независимо от того, были ли у двух пользователей ранее какие-либо отношения (их количество).Для одной половины запроса, при необходимости, можно вернуть отношение, если оно существует;
MATCH (a:user {name: {aParam})
OPTIONAL MATCH (a) -[r]- (b:user {name: {bParam})
RETURN type(r), a
Для другой половины запроса обновить отношение между двумя узлами (учитывая, что оно уже существует);
MATCH (a:user {name: {aParam}) <- [r:originalRelationship] - (b:user {name: {bParam})
WITH a, r, b
MERGE (a) - [:updatedRelationship] - (b)
WITH r
DELETE r
Но, комбинируя два, которые я не создал, работающий пример, я попытался объединить их вместе, но Франкенштейн не ожил;
MATCH (a:user {name: {aParam})
OPTIONAL MATCH (a) - [r] - (b:user {name: {bParam})
WITH a, b, r
MERGE (a) - [:block] -> (b)
WITH r
DELETE r
Может кто-то указать на мои ошибки здесь и указать мне вправильное направление?