Разверните OpenClaw в облаке в один клик
Вход/ Регистрация

Как подключить Node.js к базе данных MongoDB: инструкция

4872
10 минут чтения
Средний рейтинг статьи: 5

Во время разработки приложений на Node.js может возникнуть необходимость в хранении данных. Использовать в качестве хранилищ данных переменные приложения или файлы на хосте не всегда удобно. В этих случаях лучше рассмотреть вариант с подключением к приложению внешней базы данных.

Для интеграции с Node.js отлично подходит MongoDB. В этой СУБД данные представлены в JSON-формате, с которым удобно работать на JavaScript. В этом материале мы расскажем, как подключить базу данных MongoDB к своему приложению Node.js, и рассмотрим несколько распространенных запросов к БД.

Эта инструкция подойдет для Node.js версии 14 и выше и MongoDB версии 4.4 и выше.

Тестовая база данных

В качестве тестовой базы данных мы будем использовать базу testdb, в которой находится коллекция employees. В ней хранится информация о сотрудниках абстрактного предприятия: отдел работы, дата рождения, уровень заработной платы и тому подобная информация. Приложение Node.js будем подключать именно к этой базе данных, а работать будем с коллекцией employees.

Создание пользователя в MongoDB Compass

Создадим отдельного пользователя, под которым будем подключаться к базе данных. Присвоим этому пользователю роль администратора всех баз данных. В продакшене так делать не стоит — это негативно скажется на безопасности.

Откройте терминал MongoDB Shell и выполните следующий запрос:

    
> use admin
> db.createUser({
user: "Timeweb",
pwd: "cloud",
roles: [
{ role: "userAdmin", db: "admin" },
{ role: "dbAdminAnyDatabase", db: "admin" }
]
})

Вывод :

    
{ ok: 1 }

Пользователь с логином «Timeweb» и паролем «cloud» будет использоваться для подключения к БД.

Настройка среды выполнения

Для подключения приложения Node.js к базе данных MongoDB необходимо установить дополнительный пакет mongodb

    
npm install mongodb --save npm install mongodb-core --save

DBaaS

Запустите свою базу данных в облаке и
оптимизируйте процессы DevOps и CI/CD.

Подключение

Основным объектом, через который мы будем осуществлять взаимодействие с базой данных MongoDB, является объект класса MongoClient. Импортируем этот класс:

    
const {MongoClient} = require('mongodb')

И объявляем объект DBclient с помощью конструктора:

    
const MongoDBclient = new MongoClient('URI')

На вход конструктору класса подаётся URI, который содержит в себе информацию о пользователе, IP и порте сервера. Вот структура URI:

    
mongodb://login:password@IP:PORT/?authMechanism=method

В случае с размещенной на локальном устройстве БД, URI имеет следующий вид:

    
mongodb://Timeweb:cloud@127.0.0.1:27017/?authMechanism=DEFAULT
  • Timeweb — имя пользователя;
  • cloud — пароль;
  • 27017 — порт;
  • DEFAULT — механизм авторизации.

Осуществим подключение к серверу с БД:

    
const {MongoClient} = require('mongodb') const MongoDBclient = new MongoClient('mongodb://Timeweb:cloud@127.0.0.1:27017/?authMechanism=DEFAULT')

const connect = async () =>{
   try {
       await MongoDBclient.connect()
       console.log("Успешно подключились к базе данных")
       await MongoDBclient.close()
       console.log("Закрыли подключение")
   } catch (e) {
       console.log(e)
   }
}

connect()

Вывод:

    
Успешно подключились к базе данных Закрыли подключение

Любые взаимодействия с базой данных — это асинхронные операции. Поэтому вместе с ними необходимо использовать async и await. Рассмотрим несколько популярных операций.

Вставка новых документов

Вставка новых документов осуществляется выполнением запроса к БД с данными о документах в качестве аргумента.

Вставка одного документа

    
const {MongoClient} = require('mongodb') const MongoDBclient = new MongoClient('mongodb://Timeweb:cloud@127.0.0.1:27017/?authMechanism=DEFAULT') const employee = {    patronymic: 'Olegovich',    surname: 'Eparskii',    age: 45,    salary: 260000,    department: 'DevRel',    date_of_birth: '15.11.1977',    first_name: 'Anton' } const Insert = async () =>{    try {        await MongoDBclient.connect()        console.log("Успешно подключились к базе данных")        const employees = MongoDBclient.db('testdb').collection('employees')        await employees.insertOne(employee)        await MongoDBclient.close()        console.log("Закрыли подключение")    } catch (e) {        console.log(e)    } } Insert()

Вставка нескольких документов

    
const {MongoClient} = require('mongodb') const MongoDBclient = new MongoClient('mongodb://Timeweb:cloud@127.0.0.1:27017/?authMechanism=DEFAULT') const ManyEmployees = [{    patronymic: 'Vasiilevich',    surname: 'Brezhnev',    age: 27,    salary: 160000,    department: 'Legal Department',    date_of_birth: '12.05.1995',    first_name: 'Pavel' },    {        patronymic: 'Yurievich',        surname: 'Blinov',        age: 30,        salary: 200000,        department: 'Tech Support',        date_of_birth: '06.02.1992',        first_name: 'Arkadiy'    }] const Insert = async () =>{    try {        await MongoDBclient.connect()        console.log("Успешно подключились к базе данных")        const employees = MongoDBclient.db('testdb').collection('employees')        await employees.insertMany(ManyEmployees)        await MongoDBclient.close()        console.log("Закрыли подключение")    } catch (e) {        console.log(e)    } } Insert()

Проверим общее количество документов в коллекции после вставок:

    
const {MongoClient} = require('mongodb') const MongoDBclient = new MongoClient('mongodb://Timeweb:cloud@127.0.0.1:27017/?authMechanism=DEFAULT') const Count = async () =>{    try {        await MongoDBclient.connect()        console.log("Успешно подключились к базе данных")        const AllDocuments = await MongoDBclient.db('testdb').collection('employees').find().toArray()        console.log("Количество документов в базе данных:", AllDocuments.length)        await MongoDBclient.close()        console.log("Закрыли подключение")    } catch (e) {        console.log(e)    } } Count()

 Вывод:

    
Успешно подключились к базе данных Количество документов в базе данных: 5 Закрыли подключение

Вывод документов

Для обращения к документам базы данных и самой базе данных используется такая конструкция:

    
MongoClienObject.db('dbname').collection('collectionname').operation

Где:

  • MongoClienObject — объект класса MongoClient;
  • dbname — имя базы данных, к которой обращаемся;
  • collectionname — имя коллекции, к которой обращаемся;
  • operation — запрос к БД или коллекции, например, findOne;

Если запрос осуществляется непосредственно к БД, то collection('collectionname') не указываем.

Выведем все документы в коллекции employees:

    
const {MongoClient} = require('mongodb') const MongoDBclient = new MongoClient('mongodb://Timeweb:cloud@127.0.0.1:27017/?authMechanism=DEFAULT') const Find = async () =>{    try {        await MongoDBclient.connect()        console.log("Успешно подключились к базе данных")        const AllDocuments = await MongoDBclient.db('testdb').collection('employees').find().toArray()        console.log(AllDocuments)        await MongoDBclient.close()        console.log("Закрыли подключение")    } catch (e) {        console.log(e)    } } Find()

 Вывод:

    
Подключение прошло успешно [                                                    {                                                    _id: new ObjectId("637c9cbd7025c2523a76fe64"),     patronymic: 'Sergeevich',                          surname: 'Antonov',                                age: 50,                                           salary: 100000,                                    department: 'marketing',                           date_of_birth: '15.11.1972',                       first_name: 'Anatoly'                            },                                                 {                                                    _id: new ObjectId("637ca6127025c2523a76fe65"),     patronymic: 'Valentinovich',     surname: 'Konopatka',     age: 35,     salary: 200000,     department: 'QA',     date_of_birth: '12.06.1987',     first_name: 'Sergey'   } ] Подключение закрыто

Обновление документов

Обновление документов выполняется аналогично предыдущим операциям. Выполним сначала обновление одного документа, а затем обновление нескольких.

Обновление одного документа

    
const {MongoClient} = require('mongodb') const MongoDBclient = new MongoClient('mongodb://Timeweb:cloud@127.0.0.1:27017/?authMechanism=DEFAULT') const Update = async () =>{    try {        await MongoDBclient.connect()        console.log("Успешно подключились к базе данных")        const employees = MongoDBclient.db('testdb').collection('employees')        await employees.findOneAndUpdate({first_name: 'Anton'} , { $set: {first_name: "Antoshka"}})        await MongoDBclient.close()        console.log("Закрыли подключение")    } catch (e) {        console.log(e)    } } Update()

Вот результат до и после. С помощью этого скрипта мы изменили имя в документе.

Image2

Обновление нескольких документов

    
const {MongoClient} = require('mongodb') const MongoDBclient = new MongoClient('mongodb://Timeweb:cloud@127.0.0.1:27017/?authMechanism=DEFAULT') const Update = async () =>{    try {        await MongoDBclient.connect()        console.log("Успешно подключились к базе данных")      const employees = MongoDBclient.db('testdb').collection('employees')        await employees.updateMany({$or:[{department: 'DevRel'},{department: 'marketing'}]} , { $set: {department: "PR"}})

       await MongoDBclient.close()
       console.log("Закрыли подключение")
   } catch (e) {
       console.log(e)
   }
}

Update()

Вот результат работы:

Image1

Разверните MongoDB в облаке за пару минут

Таблица тарифов
Сравнение тарифов
Cloud DB 1/2/20 —
790 ₽/мес
Cloud DB 2/2/30 —
1160 ₽/мес
Cloud DB 2/4/40 —
1580 ₽/мес
Cloud DB 4/8/80 —
3160 ₽/мес
Cloud DB 4/12/120 —
4240 ₽/мес
Cloud DB 6/12/180 —
5460 ₽/мес
Cloud DB 8/16/220 —
7040 ₽/мес
Процессор1 x 3.3 ГГц2 x 3.3 ГГц2 x 3.3 ГГц4 x 3.3 ГГц4 x 3.3 ГГц6 x 3.3 ГГц8 x 3.3 ГГц
Память2 ГБ2 ГБ4 ГБ8 ГБ12 ГБ12 ГБ16 ГБ
Диск NVMe20 ГБ30 ГБ40 ГБ80 ГБ120 ГБ180 ГБ220 ГБ
Резервные копииЕстьЕстьЕстьЕстьЕстьЕстьЕсть
Приватный IPЕстьЕстьЕстьЕстьЕстьЕстьЕсть
PostgreSQL 18
Выбрать
Фиксированный
Произвольный
CPU
RAM
Диск
Стоимость
1 x 3.3 ГГц
2 ГБ
20 ГБ
790 ₽/мес
2 x 3.3 ГГц
2 ГБ
30 ГБ
1 160 ₽/мес
2 x 3.3 ГГц
4 ГБ
40 ГБ
1 580 ₽/мес
Раз в день
0 ₽/месяц
Отключить
Не рекомендуется

Заключение

MongoDB — это отличный инструмент, особенно в связке с Node.js. В этом материале мы использовали локальную базу данных, но можно использовать и другие варианты размещения БД. Например, в облаке. В Timeweb Cloud можно арендовать облачную базу данных MongoDB и начать работать в кратчайшие сроки. 

4872
10 минут чтения
Средний рейтинг статьи: 5

Читайте также

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
Пока нет комментариев