Все ноды/Data/Database

БД: подсчёт

Подсчитывает количество документов, соответствующих фильтру.

БД: подсчёт
FilterResult

Тип в графе: db_count

Exec

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

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

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

Минимальный рабочий воркфлоу

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

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

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

Подсчёт отвечает на вопрос «сколько», не вынимая сами документы: сколько заявок в работе, есть ли уже запись с таким ключом, не превышен ли лимит на клиента. Это дешевле, чем db_find с последующим подсчётом массива, и — что важнее — честнее: у поиска в count лежит длина выданной страницы, обрезанная лимитом, а здесь считаются все совпадения. Если после проверки вам всё равно нужен сам документ, берите сразу db_find_one: у него есть поле found, и это один запрос вместо двух.

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

Порт Фильтр приносит и запуск ноды, и сам фильтр; объект с ребра заменяет фильтр из настроек, пустой триггер оставляет настроенный, значение другой формы роняет ноду — иначе опечатка тихо превратилась бы в «посчитать всю коллекцию». На выходе одно поле — count.

Пустой фильтр здесь допустим и означает «все документы коллекции»; такой подсчёт хранилище делает одним быстрым запросом. Фильтр с операторами ($gt, $in, $regex) считается перебором подходящих документов, поэтому на больших коллекциях держите в фильтре хотя бы одно точное равенство по полю верхнего уровня.

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

  • Считают через поиск. count у db_find — это размер страницы: с лимитом 100 «всего» никогда не будет больше ста.
  • Считают, чтобы потом прочитать. Две ноды — два обращения к базе, и между ними данные могут измениться. Для «есть ли и какой» достаточно db_find_one.
  • Строят лимит на подсчёте. «Посчитать, потом вставить, если меньше десяти» — это не защита: параллельный запуск успеет вставить между двумя нодами. Такие правила должны опираться на уникальный ключ и upsert (db_update), а не на счётчик.
  • Шаблоны в поле фильтра. {{ … }} в JSON-редакторе не раскрывается — динамический фильтр собирают template или code_javascript и подают на порт.
  • Сравнивают число прямо в шаблоне. Развилку удобнее строить if-ом по {{ nodes.<id>.output.count }}, а не собирать текст с числом и разбирать его дальше.

Входы

ПортПроводДанныеПримечания
FilterinputИсполнение + данныеexecute_data

Run trigger and dynamic payload (overrides static config). The payload must be an object — a value of any other shape fails the node instead of being ignored.

Выходы

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

Настройки

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

ID коллекции

Фильтрfilterobject

Общие поля

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

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