UBOS Community

Oleksii
Oleksii

Posted on

Робота з mongoDB

Зміст

  1. Вступ
  2. Підготовка
  3. Post запит
  4. Get запит
  5. Update запит
  6. Delete запит

Вступ

Створімо базовий CRUD з використанням бази даних MongoDB. Для прикладу ми будемо працювати з сутністю book з такими полями:

  • id - унікальний автоматично згенерований ідентифікатор
  • name - назва книги
  • genre - жанр
  • author - автор
  • deleted - поле, по котрому перевірятимемо чи книга не видалена

Підготовка

Перш за все ми повинні встановити інструменти для роботи з MongoDB. Для цього відкрийте меню в правому верхньому кутку та оберіть пункт Manage palette.

palette guideline

У вікні, що з'явиться, відкрийте вкладку Install та знайдіть пункт з назвою "node-red-node-mongodb", Уважно перевірте, чи ви встановлюєте правильні вузли, і натисніть на кнопку install.

Install node

Після завантаження у нас з'являться нові вузли.

pipelines

Тепер під'єднаймо базу даних MongoDB до Node-red. Про те як створити базу даних MongoDB читайте тут. Винесіть вузол mongoDB на робочу область та двічі клацніть по ньому. В результаті у нас з'явиться вікно з налаштуванням вузла. Натисніть на кнопку з олівчиком, щоб створити нову конфігурацію для бази даних.

add new db configuration

У меню Services натисніть на поле DATA SOURCE, а потім на назву вашої бази даних, щоб отримати інформацію про неї.
Services menu

db info

Цю інформацію нам потрібно внести в конфігурацію, де:
Host - Host
Port - залишаємо без змін(27017)
Database - Name
Username - User Name
Password - Password
Name - Назва конфігурації, тут можна писати яку забажаєте
Connect options - Connect options
Після заповнення натисніть кнопку Add
add conf

Тепер потрібно зберегти наші зміни за допомогою кнопки Deploy.
Якщо ми все зробили правильно, то під вузлом з'явиться зелений квадратик з надписом connected. В іншому випадку там був би червоний квадратик з надписом eror.
Connected db

Тепер ми зможемо підключатись до нашої бази даних за допомогою створених нами конфігурацій, для цього просто оберіть пункт з її назвою в налаштуваннях вузла.
config

Post запит

Зробімо ендпоінт для створення запису про нову книгу. Для цього нам знадобляться такі вузли, як http in, function, mongodb out, http responce.
Unfinished post method

Потрібно налаштувати всі вузли. Щоб відкрити вікно з налаштуванням кожного вузла - двічі клацніть по ньому мишкою.

  • http in - Оберіть метод POST та придумайте адресу по котрій можна буде звернутись до ендпоінту. Після цього натисніть Done

post http in

  • Function - тут лише потрібно до даних, що прийдуть ззовні, додати нове поле deleted post funtion
msg.payload.deleted = false;
return msg;
Enter fullscreen mode Exit fullscreen mode
  • Mongodb out - Оберіть раніше створений сервер, додайте назву колекції та оберіть операцію insert. Також потрібно поставити галочку біля опції Only store msg.payload object. mongo db out post -Вузол http response залишаємо без змін, він потрібен, щоб отримати відповідь

Тепер потрібно з'єднати всі вузли, після чого наш перший ендпоїнт готовий. Збережіть зміни за допомогою кнопки Deploy.
post finished

Протестуймо наш ендпоїнт. Для цього я скористаюсь програмою postman, але можна використати і UI Editor. Для того, щоб скопіювати посилання Node-red наведіть на поле з його назвою в меню Services та натисніть на значок з аркушем.

save node url

Передаємо відповідні поля в тіло запиту і натискаємо Send. Якщо ми отримуємо статус код 200 значить все виконано успішно.

post request

Таким самим чином я створю ще 2 записи в базі даних для того, щоб з ними працювати потім.

Get запит

Тут нам знадобляться такі вузли, як http in, function, mongodb in, http response.
-http in - оберіть метод GET і введіть адрес по якому можна буде звернутись до ендпоінту.
get http in
-function - шукаємо тільки записи, котрі не були видалені
function get

msg.payload = {
    deleted: false
}
return msg;
Enter fullscreen mode Exit fullscreen mode

-mongodb in - потрібно ввести назву колекції та обрати операцію find
get mongodb in

Цей flow матиме такий вигляд
post flow

Зберігаємо зміни та повертаємось в postman. Метод Get повертає список всіх наших книг
get result

Update запит

Нам знадобляться такі вузли, як http in, function, mongodb out, http response.
-http in - Обираємо метод PUT і вводимо адрес
update http in
-function - Оскільки ми будемо працювати з id об'єкту, нам знадобиться objectid. Щоб його додати, відкрийте вкладку setup, натисніть кнопку add і введіть потрібне значення. Потім поверніться у вкладку On message. Оскільки id для кожного елементу унікальний, його потрібно видалити перед оператором оновлення($set).
objectid
update query

msg.query = {"_id": objectid(msg.payload._id)}
delete msg.payload._id
msg.payload={
    $set: msg.payload
}
return msg;
Enter fullscreen mode Exit fullscreen mode

-mongodb out - Введіть назву колекції та оберіть операцію update
mongodb out update

Flow матиме такий вигляд
update flow

Повертаємось у postman. Тут нам потрібно передати цілий об'єкт, який хочемо замінити, тому тіло запиту буде таке саме як при POST запиті, за виключенням поля _id яке потрібне, щоб ідентифікувати об'єкт який ми міняємо. Також виконаємо Get запит, щоб перевірити результат. Як результат, книга по id була змінена.
update result
get for update check

Delete запит

Загалом, операція видалення буде такою самою як update, за виключенням того, що ми не будемо передавати ніякі дані окрім id, та встановимо полю deleted значення true. Це означає, що ми не будемо безпосередньо видаляти запис з бази даних.

-http in - оберіть метод delete та вкажіть адрес
delete http in

-function - додайте objectid так, як ми це робили раніше. В розділі On message введіть наступний код
delete function

msg.query = { "_id": objectid(msg.payload._id) }
delete msg.payload._id
msg.payload = {
    $set: {"deleted" : true}
}
return msg;
Enter fullscreen mode Exit fullscreen mode

-mongodb out - введіть назву колекції та оберіть операцію update
mongodb out delete

Flow матиме такий вигляд
delete flow

Зберігаємо зміни та перевіряємо все у postman. Тут ми передамо в тіло запиту id запису, котрий будемо видаляти. Видаляємо книгу з назвою "example". Після виконання знову викличемо Get запит для перевірки. Цієї книги більше немає в списку.
delete result
get for delete check

Discussion (0)