Я хочу обновить узел из входной карты в моем запросе cypher, но я хочу только установить свойства, которые еще не существуют в узле (тогда как =
переопределяет все свойства узла и +=
переопределяет все свойства, отображаемые на карте).Установить только свойства, которых не существует
Например, если у меня есть узел (n {key: "abc", prop1: "value"})
и у меня есть карта для обновления с:
WITH {key: "abc", prop1: "othervalue", prop2: "newvalue"}) AS update_map
Я хотел бы операцию, которая соответствовала бы по key
и обновлять prop2
не отменяя prop1
, поэтому результат будет: (n {key: "abc", prop1: "value", prop2: "newvalue"})
.
Мой нынешний подход был идти ключом на ключ:
UNWIND KEYS(update_map) AS update_map_key
MATCH (n {key: update_map.key})
WHERE n[update_map_key] IS NULL
SET n[update_map_key] = update_map[update_map_key]
Это выглядит большим (возможно, за исключением того, поиск-для-узла-за ключ), но, к сожалению, не работает, потому что хотя вы можете получить свойство с именем переменной, используя синтаксис []
, вы не можете его обновить.
Любые идеи? Запуск на Neo4j 2.3.7, если это имеет значение.
Понравилось, но похоже, что это только для Neo4j 3 (требующих определяемых пользователем процедур). У вас возникло решение для Neo4j 2.3? – PaF
К сожалению, нет. Это функция 3.x. – Vardan