Там есть лучший способ сделать это, без подзапросов , Вместо этого, функция для удаления элемента массива, будет использована:
FOR doc IN sales
FOR item IN doc.items
FILTER item.code == ""
UPDATE doc WITH { items: REMOVE_VALUE(doc.items, item) } IN sales
REMOVE_VALUE принимает массив в качестве первого аргумента, и элемент массива внутри этого массива в качестве второго аргумента, и возвращает массив, который имеет все элементы первого аргумента, но без этого конкретного элемента, который был во втором аргументе.
Пример:
REMOVE_VALUE([1, 2, 3], 3) = [1, 2]
Пример с вложенными документами будучи значение:
REMOVE_VALUE([ {name: cake}, {name: pie, taste: delicious}, {name: cheese} ] , {name: cheese}) = [ {name: cake}, {name: pie, taste: delicious} ]
Вы не можете просто использовать REMOVE_VALUE отдельно, как вы используете команду REMOVE отдельно. Вы должны использовать его как часть команды UPDATE, а не как часть команды REMOVE. К сожалению, способ, которым это работает, состоит в том, чтобы сделать копию списка «предметов» внутри вашего конкретного «документа», с которым вы в настоящее время имеете дело, но копия имеет недокапитал, который вам не нравится, удален из списка «items» , Эта новая копия списка заменяет старую копию списка элементов.
Существует еще один, самый эффективный способ удаления субдокументов из списка - и это путем доступа к определенной ячейке списка с элементами [2] - и вам нужно использовать функции fancy array даже более привлекательные, чем тот, который я используемый здесь, чтобы узнать конкретную ячейку в списке (будь то [2] или [3] или [567]), а затем заменить содержимое этой ячейки Null, используя команду UPDATE, а затем установить параметры KeepNull = false. Это «самый эффективный» способ сделать это, но это будет чудовищно выглядящий сложный запрос): я мог бы написать этот запрос позже и поместить его сюда, но прямо сейчас. Я бы честно предложил использовать метод, описанный выше, если у вас нет тысячи поддокументов в каждом списке.
Удивительный, не думал о решении проблемы таким образом. Вы рок, бумага, ножницы :) – iswak