как применить общую операцию json-patch через neo4j или apoc

Есть ли причудливый или хитрый способ применить произвольный массив jsonpatch к картам с помощью шифра или даже apoc?

Итак, если у меня есть

  • карта {a: 0, b: 0, c: 0}
  • набор операций, закодированных в картах, скажем, [{replace: "a", value: 1}, {replace: "b", value: 1}]. Я знаю, что это не relay jsonpatch, но это все, что мне нужно. Если есть полноценное решение jsonpatch, еще лучше.

Я ищу процедуру, объединение процедур или изящный способ шифрования, который производит {a: 1, b: 1, c: 0}

apoc.map.setKey(map, key, value) найдено в https://neo4j-contrib.github.io/neo4j-apoc-procedures/#_map_functions, но это одновременно манипулирует только одним значением. Я попытался совместить это с FOREACH cypher, но мне действительно нужно изменить карту, а не узел.

моя попытка была

create (:TEST {a: 0, b: 0, c: 0});

match (t:TEST)
with t, [{replace: "a", value: 1}, {replace: "b", value: 1}] as refs
foreach(ref in refs
    | set t = apoc.map.setKey(properties(t), ref.replace, 
ref.value))
return *;

Конечно, я всегда мог позволить клиенту выполнять операции jsonpatch, но я предпочитаю способ сделать это в файле tx. Я знаю, что мог бы сам написать процедуру в крайнем случае.


person tscherg    schedule 12.06.2018    source источник


Ответы (1)


Как насчет такого...

MATCH (test:TEST {a:0, b:0, c:0})
SET test += {a: 1, b: 1}
RETURN test
person Dave Bennett    schedule 12.06.2018
comment
спасибо, я думаю, что это намного более лаконично, чем то, что у меня было. Но все же я не хочу мутировать узел, я просто хочу мутировать коллекцию. - person tscherg; 12.06.2018
comment
извините за это ... я застрял на я ищу процедуру, объединение процедур или аккуратный способ в шифре, который производит {a: 1, b: 1, c: 0} - person Dave Bennett; 12.06.2018