Коллекции документов

Раздел База данных — это хранилище JSON-документов рабочего пространства. Коллекция похожа на таблицу без схемы: у неё есть имя, описание и документы — произвольные JSON-объекты. При вставке каждый документ получает поле _id (своё значение можно задать самому).

Когда это нужно

Коллекции стоит брать, когда данные переживают запуск и их надо выбирать по полям: заявки, карточки клиентов, каталог, журнал обработанных сообщений.

Для другого есть другое. Смысловой поиск по тексту документов — это база знаний. Одно значение на сессию (счётчик, флаг, последний выбор) дешевле держать в переменных и памяти, а не в отдельной коллекции.

app.iterna.ai

База данных

orders

1 248 документов · 3,4 МБ использовано

ЗапросВставить
_idcustomerstatustotal
a3f1…acmepaid12 400
b7c2…globexpending980
Коллекции слева, документы выбранной коллекции справа.

Коллекцию создают кнопкой Новая коллекция; документ можно вставить и отредактировать прямо в интерфейсе (Вставить, Редактировать), а кнопка Запрос прогоняет по коллекции тот же фильтр, который вы потом поставите в ноду.

Ноды

Вход
БД: вставка
Выход
  • Исполнение + данные
Заявка из чата попадает в коллекцию.
Нода Что делает Что возвращает
db_insert Вставляет документ; массив вставляется поштучно inserted_ids, count
db_find Выборка по фильтру с сортировкой и постраничностью docs, count
db_find_one Первый подходящий документ doc, found
db_count Сколько документов подходит под фильтр count
db_update Обновляет по фильтру, поддерживает upsert и multi matched, modified, upserted_id
db_delete Удаляет по фильтру deleted

Коллекция выбирается в поле Collection выпадающим списком, а не вводится руками.

Фильтры и обновления

Фильтр — это подмножество языка запросов MongoDB. Доступны операторы сравнения $eq, $ne, $gt, $gte, $lt, $lte; вхождение $in, $nin; логические $and, $or, $not, $nor; а также $exists, $size и $regex. К вложенным полям обращаются через точку — user.name, tags.0.

Выражение обновления понимает $set, $unset, $inc, $mul, $min, $max, $push, $pull, $addToSet.

{ "status": "pending", "total": { "$gte": 1000 } }

В db_find сортировка задаётся списком пар «поле, направление» ([["created_at", -1]], где 1 — по возрастанию, -1 — по убыванию); limit по умолчанию 100, есть skip и projection (1 — включить поле, 0 — исключить).

Порт против поля

Значение, пришедшее на входной порт ноды, заменяет фильтр (или документ), настроенный в полях. Если по ребру ничего не пришло — а пустая строка от чисто исполнительного триггера считается именно этим — остаётся настроенное значение. Значение неподходящей формы роняет ноду с внятной ошибкой, а не превращается в «подходит всё».

У db_update на порт можно подать конверт {"filter": …, "update": …}; любой другой объект считается фильтром.

Квота

Размер коллекций считается в байтах и упирается сразу в два потолка: потолок самого рабочего пространства и тарифный потолок владельца, который считается по всем его пространствам сразу. Рядом живёт лимит на число коллекций. Текущий расход виден в шапке коллекции («использовано») и в разделе Настройки → Использование; значения лимитов — в Лимитах тарифов.