Все ноды/Data/Database
БД: подсчёт
Подсчитывает количество документов, соответствующих фильтру.
Тип в графе: db_count
Exec
Можно включить ветку ошибки (expose_error_output) и обработать сбой отдельным путём.
Порты можно разделить на исполнение и данные (split ports).
Как попробовать
Минимальный рабочий воркфлоу
- Исполнение + данные
Запускается сразу
Как применять
Подсчёт отвечает на вопрос «сколько», не вынимая сами документы: сколько заявок в работе, есть ли уже
запись с таким ключом, не превышен ли лимит на клиента. Это дешевле, чем 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_data | object |
Настройки
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
Коллекцияcollection_id | string | "" | ID коллекции |
Фильтрfilter | object | — |
Общие поля
Эти три поля есть у каждой ноды: платформа добавляет их сама, а не автор ноды.
expose_error_output— Если включено, показывает выход выполнения для подключения нод, которые запускаются при сбое этого шага.split_ports_in— Показывать отдельные порты входа для выполнения и данных вместо одного объединённого.split_ports_out— Показывать отдельные порты выхода для выполнения и данных вместо одного объединённого.