Nodul LogoNodul
База данных

Основы работы с базой данных

Встроенная база данных в Nodul хранит структурированные данные в хранилищах и коллекциях. Ниже на этой странице описаны основные принципы работы с базой и с узлами сценария.

Как создать базу данных

Создайте хранилище

Нажмите Create storage. В поле имени укажите название латиницей, без пробелов; части имени разделяйте _. В примере ниже: test_storage.

Диалог Create storage: ввод имени хранилища

После сохранения на странице баз данных новое хранилище появится в списке.

Хранилище создано и отображается в списке

Создайте коллекцию

Откройте хранилище test_storage, нажмите Create collection и задайте имя коллекции, например users.

Страница хранилища и диалог Create collection

После подтверждения коллекция появится в интерфейсе этого хранилища рядом с остальными.

Коллекция создана и отображается в списке

На экране коллекции в приложении (где вы только что создали users) также есть возможность вручную создать объект или отфильтровать значения запросом.

Детальные настройки фильтров, все операторы и формат массовых обновлений в YAML описаны на страницах Запросы к коллекции и Изменение данных в коллекции. Ниже: базовые настройки, которых достаточно, чтобы начать.

Узлы в сценарии

Один раз для всех узлов ниже: у узлов Get elements, Create element, Update object, Update objects, Delete object одни и те же поля Storage ID и Collection name: это выпадающие списки. Укажите test_storage и users (или ваши имена). На следующем скриншоте показано, как выбирать хранилище и коллекцию; далее по тексту этот фрагмент интерфейса не дублируется.

Поля Storage ID и Collection name в узле

Create element: создать один объект

Этот узел записывает в коллекцию один объект. В поле Object value нужно передать JSON: объект в фигурных скобках с парами «ключ: значение».

Пример JSON для поля Object value (карточка клиента):

{
  "name": "Анна Петрова",
  "phone": "+79001234567",
  "email": "[email protected]",
  "active": "yes",
  "notes": "Первый контакт из формы"
}

Результат: в коллекции появляется новая запись с автоматически выданным идентификатором объекта. В выводе узла возвращается Object ID этой записи.

На скриншоте ниже показаны заполненные поля узла и вывод с идентификатором созданной записи (Object ID).

Create element: JSON в Object value и ответ с Object ID

Get elements: получить объекты по фильтру

Этот узел ищет в коллекции записи, которые подходят под условия в поле Filter (текст в формате YAML). Поле Limit задаёт, сколько записей максимум может попасть в ответ за один запуск узла.

Пример: та же карточка клиента, что выше, по номеру телефона:

conditions:
  - operation: equal
    query:
      path: phone
    expected:
      value: "+79001234567"

Ещё пример: фильтр по email:

conditions:
  - operation: equal
    query:
      path: email
    expected:
      value: "[email protected]"

Результат: в выводе приходит список (массив) найденных объектов.

На скриншоте ниже видны поле Filter с YAML и вывод со списком найденных объектов.

Get elements: Filter в YAML и массив найденных объектов в выводе

Update object: обновить один объект по id

Этот узел обновляет одну запись по Object ID; новые данные задаются в поле Value в формате JSON. Переключатель Replace задаёт, частично обновлять запись или заменить её целиком. Если Replace выключен, меняются только поля из JSON в Value, остальное в записи сохраняется. Если включён, объект в коллекции полностью перезаписывается тем, что вы указали в Value.

  • Replace выключен: в JSON перечислите только поля, которые нужно изменить; остальные поля объекта сохранятся.
    Пример: сменить только заметку и деактивировать клиента:
{
  "notes": "Перезвонить в пятницу",
  "active": "no"
}
  • Replace включён: JSON в Value полностью заменяет сохранённый объект. Все поля, которых нет в JSON, пропадут.
    Пример полной замены тем же клиентом после правок:
{
  "name": "Анна Петрова",
  "phone": "+79001234567",
  "email": "[email protected]",
  "active": "yes",
  "notes": "Обновили email"
}

Object ID обычно берут из Create element (ид из ответа) или из результата Get elements. На иллюстрациях ниже Object ID уже подставлен из предыдущего узла.

На первом скриншоте ниже показано частичное обновление: переключатель Replace выключен, в Value только поля, которые нужно изменить. Остальные поля объекта в базе не меняются (name, phone, email узел не перезаписывает, если их нет в JSON). По выводу узла проверьте rows_affected: так видно, что запись найдена и обновлена.

Update object: частичное обновление (Replace выкл)

На следующем скриншоте показана полная замена объекта: Replace включён, в Value передан полный JSON объекта (как в примере выше). После выполнения содержимое записи в коллекции совпадает с Value; поля, которых нет в JSON, из записи исчезнут.

Update object: полная замена (Replace вкл)

Update objects: обновить несколько объектов по фильтру

Этот узел находит все записи по тому же Filter (YAML), что и в Get elements, и к каждой подошедшей строке применяет изменения из блока Updater (YAML).

Пример: в карточке клиента уже актуальный email [email protected] (как после полной замены в Update object). Массово выставим active в "no" для записей с этим email. Filter:

conditions:
  - operation: equal
    query:
      path: email
    expected:
      value: "[email protected]"

В Updater перечисляют правки через items (полный формат и выражения см. в Изменение данных в коллекции). Простейший случай, одно поле:

items:
  - path: "active"
    set:
      value: "no"

Результат: у всех попавших под фильтр записей поле active станет "no". В выводе смотрите rows_affected: сколько строк реально изменено. Если там 0, фильтр никого не нашёл (проверьте email и условия), обновления в таблице не будет.

На скриншоте ниже показаны поля Filter и Updater и вывод с rows_affected.

Update objects: Filter и Updater (items), в выводе rows_affected

Delete object: удалить один объект

Этот узел удаляет запись по Object ID. В Object ID введите или передайте из предыдущего узла идентификатор (Get elements, Create element и т.д.). Строка удаляется из коллекции. В выводе возвращается Object ID удалённого объекта.

На скриншоте ниже показаны заполненные поля и вывод с идентификатором удалённой записи.

Delete object: Object ID из предыдущего узла и ответ с id удалённой записи

Примечания

  • Идентификаторы из URL. Если вы работаете с базой из JavaScript или нужно вручную подставить storage и коллекцию, откройте коллекцию в приложении и посмотрите адресную строку: после /data-storage/database/ идёт идентификатор хранилища (UUID), затем сегмент коллекции.

  • Логические значения. Встроенная база интерпретирует true и false как 1 и 0.

  • Объём хранилища. На одно хранилище (storage) сейчас действует лимит 1 ГБ. Поэтому рекомендуем не загружать в базу очень большие объёмы данных (например изображения в Base64, крупные двоичные строки и т.п.).

Что дальше