как применить общую операцию json-patch через neo4j или apoc - PullRequest
0 голосов
/ 12 июня 2018

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

Так что, если у меня есть

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

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

Есть apoc.map.setKey(map, key, value) найдено в https://neo4j -contrib.github.io / neo4j-apoc-процедуры / # _ 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.Я знаю, что сам мог бы написать процедуру в качестве крайней меры.

1 Ответ

0 голосов
/ 12 июня 2018

Как насчет чего-то подобного ...

MATCH (test:TEST {a:0, b:0, c:0})
SET test += {a: 1, b: 1}
RETURN test
...