Все ноды/Data/Database

Записи: изменить

Обновляет документы по фильтру MongoDB-style update-выражением ($set, $inc, $push, ...). Поддерживает upsert и multi.

Записи: изменить▶
Фильтр и изменениеИтог действия

Тип в графе: db_update

Exec

Можно включить выход ошибки и обработать сбой отдельным путём.

Порты можно разделить на исполнение и данные (split ports).

Как попробовать

Минимальный рабочий сценарий

Вход
Записи: изменить▶
Выход▶
  • Исполнение + данные
Нажмите «Скопировать ноды», откройте редактор и нажмите Ctrl+V на холсте.

Запускается сразу

Как применять

Обновление меняет существующие документы: перевести заявку в другой статус, увеличить счётчик, дописать элемент в массив. Включённое поле Создать, если нет превращает ноду в «создать или обновить» — это единственный способ записать документ по ключу так, чтобы повторный запуск не оставил дубль (у db_insert такой проверки нет). Флаг Обновить несколько переключает ноду с одного документа на все подходящие.

Как это работает

Нужны два выражения: Фильтр — какие документы взять, Что изменить — что с ними сделать ($set, $inc, $push, $unset, $addToSet и другие операторы). Порт Фильтр и изменение принимает конверт {"filter": …, "update": …} — тогда с ребра приезжают обе части; любой другой объект считается фильтром, а выражение обновления остаётся из настроек.

На выходе три поля: matched (сколько документов подошло), modified (сколько реально изменилось) и upserted_id (идентификатор созданного документа, если сработал upsert).

Частые ошибки

  • Выражение без оператора. {"status": "paid"} без $set — это не правка поля, а замена всего документа: остальные поля исчезнут, сохранится только _id. Пишите {"$set": {"status": "paid"}}.
  • Успех проверяют по modified. Ноль там означает не только «не нашли»: документ с уже нужным значением не переписывается, а при upsert счётчик тоже остаётся нулевым — новый документ виден в upserted_id. Смотрите на все три поля.
  • Забыли включить «Обновить несколько». С выключенным флагом изменится ровно один документ из подошедших, и какой именно — не определено.
  • Ждут, что upsert перенесёт весь фильтр в новый документ. В него попадают только простые равенства верхнего уровня; условия вида {"$gt": …} и пути через точку не переносятся — задавайте такие поля явно в $set.
  • Шаблоны в полях. Фильтр и Что изменить — JSON-редакторы, {{ … }} в них не раскрывается. Динамику собирают code_javascript или template и подают на порт.
  • $inc по нечисловому полю. Если в поле лежит строка, нода упадёт; приводите тип при записи.

Входы

ПортПроводДанныеПримечания
Фильтр и изменениеinputИсполнение + данныеexecute_data—

Пришедшее сюда значение ЗАМЕНЯЕТ настроенный фильтр — или, в конверте {"filter": …, "update": …}, их оба — не дополняет его, и обязано быть объектом (значение любой другой формы роняет шаг, а не игнорируется молча). Чтобы запустить шаг и сохранить настроенное, ведите тонкое ребро «исполнение», а переменные части пишите шаблонами {{ }} прямо в поле.

Выходы

ПортПроводДанныеПримечания
Итог действияoutputИсполнение + данныеexecute_dataobject

Настройки

ПолеТипПо умолчаниюОписание
Коллекцияcollection_idstring""

ID коллекции

Фильтрfilterobject—

Условие отбора в синтаксисе MongoDB: какие записи обновить.

перекрывается портом: input

Обновить несколькоmultibooleanfalse

Обновить все подходящие записи. Выключено — только первую.

Что изменитьupdateobject—

MongoDB-style update-выражение ($set, $inc, $push, ...). Обычный объект на порте считается фильтром и это поле не трогает; заменяет его только конверт {"filter": …, "update": …}.

Создать, если нетupsertbooleanfalse

Если под условие ничего не подошло — создать новую запись вместо бездействия.

Общие поля

Эти три поля есть у каждой ноды: платформа добавляет их сама, а не автор ноды.

  • expose_error_output — Если включено, показывает выход выполнения для подключения нод, которые запускаются при сбое этой ноды.
  • split_ports_in — Показывать отдельные порты входа для выполнения и данных вместо одного объединённого.
  • split_ports_out — Показывать отдельные порты выхода для выполнения и данных вместо одного объединённого.