ОБНОВЛЕНИЕ объектов в массиве в AQL ArangoDB - PullRequest
1 голос
/ 10 октября 2019

У меня есть следующая структура данных:

object1.array1[object2.array2[]]

Я хочу удалить массив2 из объекта2 или удалить все элементы массива.

Есть ли решение для этого с помощью AQL-запроса?

1 Ответ

1 голос
/ 11 октября 2019

Демонстрационный документ:

{
  "foo": [
    {"x": [1,2,3], "y": [4,5,6], "z": [7,8,9] },
    {"hello": "world" }
  ],
  "bar": true,
  "_key": "0"
}

Чтобы удалить foo[0].y ([4,5,6]) с помощью AQL, вот несколько универсальное решение:

LET attr = "foo"  // target top-level attribute
LET i = 0         // positive or negative index of target array element
LET subattr = "y" // sub-attribute to remove

LET doc = DOCUMENT("test/0")

LET before = SLICE(doc[attr], 0, i)              // array elements before target
LET middle = UNSET(doc[attr][i], subattr)        // remove sub-attribute from target element
LET after = i == -1 ? [] : SLICE(doc[attr], i+1) // elements after target
LET combined = APPEND(APPEND(before, middle), after)

UPDATE doc WITH { [attr]: combined } IN test
RETURN {NEW, OLD}

Для удаления "world" вместопросто измените его на LET i = 1 и LET subattr = "hello".

...