Использовать Node.js? Хотите выучить MongoDB? Это серия для вас!
В этой серии статей «Быстрый старт» я познакомлю вас с основами начала работы с MongoDB с Node.js. В сегодняшнем посте мы будем работать с подключением к базе данных MongoDB из скрипта Node.js, извлечением списка баз данных и выводом результатов на вашу консоль.
Настроить
Прежде чем мы начнем, мы должны убедиться, что вы выполнили несколько обязательных шагов.
Установите Node.js
Во-первых, убедитесь, что у вас установлена поддерживаемая версия Node.js (для драйвера MongoDB Node.js требуется Node 4.x или выше, и для этих примеров я использовал Node.js 10.16.3).
Вам также может понравиться: Использовать собственный драйвер MongoDB Node.js без Mongoose
Установите драйвер MongoDB Node.js
Драйвер MongoDB Node.js позволяет вам легко взаимодействовать с базами данных MongoDB из приложений Node.js. Вам понадобится драйвер для подключения к вашей базе данных и выполнения запросов, описанных в этой серии Quick Start.
Если у вас не установлен драйвер MongoDB Node.js, вы можете установить его с помощью следующей команды.
Джава
xxxxxxxxxx
1
npm install mongodb
На момент написания данной статьи установлена версия драйвера 3.3.2. Запуск npm list mongodb
покажет номер установленной версии драйвера. Подробнее о драйвере и установке смотрите в официальной документации .
Создайте бесплатный кластер MongoDB Atlas и загрузите данные образца
Далее вам понадобится база данных MongoDB. Ваша база данных будет храниться внутри кластера. На высоком уровне кластер — это набор узлов, в которых будут храниться копии вашей базы данных.
Самый простой способ начать работу с MongoDB — это использовать Atlas, полностью управляемую базу данных MongoDB как услугу. Отправляйтесь в Атлас и создайте новый кластер на бесплатном уровне. Как только ваш уровень будет создан, загрузите пример данных .
Начните работать с кластером M0 в Atlas сегодня. Это бесплатно навсегда, и это самый простой способ опробовать шаги в этой серии блогов.
Если вы не знакомы с тем, как создать новый кластер и загрузить примеры данных, ознакомьтесь с этим видеоуроки от MongoDB Developer Advocate Maxime Beugnet .
Получите информацию о соединении вашего кластера
Последний шаг — подготовить кластер к подключению.
В Atlas перейдите к кластеру и нажмите « ПОДКЛЮЧИТЬ» . Мастер подключения кластера появится.
Мастер предложит вам внести в белый список ваш текущий IP-адрес и создать пользователя MongoDB, если вы еще этого не сделали. Обязательно запишите имя пользователя и пароль, которые вы используете для нового пользователя MongoDB, так как они понадобятся вам позже.
Далее мастер предложит вам выбрать способ подключения. Выберите Подключить свое приложение . Когда мастер предложит вам выбрать версию драйвера, выберите Node.js и 3.0 или более позднюю версию . Скопируйте предоставленную строку подключения.
Для получения дополнительной информации о том, как получить доступ к мастеру подключений и выполнить шаги, описанные выше, см. Официальную документацию .
Подключитесь к своей базе данных из приложения Node.js
Теперь, когда все настроено, пришло время кодировать! Давайте напишем скрипт Node.js, который подключается к вашей базе данных и перечисляет базы данных в вашем кластере.
Импорт MongoClient
Модуль MongoDB экспортирует MongoClient
, и это то, что мы будем использовать для подключения к базе данных MongoDB. Мы можем использовать экземпляр MongoClient для подключения к кластеру, доступа к базе данных в этом кластере и закрытия подключения к этому кластеру.
Джава
xxxxxxxxxx
1
const {MongoClient} = require('mongodb');
Создайте нашу основную функцию
Давайте создадим асинхронную функцию с именем, main()
где мы будем подключаться к нашему кластеру MongoDB, вызывать функции, которые запрашивают нашу базу данных, и отключаться от нашего кластера.
Первое, что нам нужно сделать внутри, main()
это создать константу для нашего URI соединения. URI соединения — это строка соединения, которую вы скопировали в Atlas в предыдущем разделе. Вставляя строку подключения, не забудьте обновить <username>
и <password>
стать учетными данными для пользователя, которого вы создали в предыдущем разделе. Примечание: имя пользователя и пароль, указанные вами в строке подключения, НЕ совпадают с вашими учетными данными Atlas.
Джава
xxxxxxxxxx
1
/**
2
* Connection URI. Update <username>, <password>, and <your-cluster-url> to reflect your cluster.
3
* See https://docs.mongodb.com/ecosystem/drivers/node/ for more details
4
*/
5
const uri = "mongodb+srv://<username>:<password>@<your-cluster-url>/test?retryWrites=true&w=majority";
Теперь, когда у нас есть URI, мы можем создать экземпляр MongoClient.
Джава
xxxxxxxxxx
1
const client = new MongoClient(uri);
Примечание. При запуске этого кода вы можете увидеть DeprecationWarnings вокруг анализатора строки URL-адреса и механизма обнаружения и мониторинга сервера. Если вы видите эти предупреждения, вы можете удалить их, передав параметры MongoClient. Например, вы можете создать экземпляр MongoClient с помощью вызова new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true })
. См. Документацию по API драйвера Node.js MongoDB для получения дополнительной информации об этих параметрах.
Теперь мы готовы использовать MongoClient для подключения к нашему кластеру. client.connect()
вернет обещание . Мы будем использовать ключевое слово await при вызове, client.connect()
чтобы указать, что нам следует блокировать дальнейшее выполнение до завершения этой операции.
Джава
xxxxxxxxxx
1
await client.connect();
Теперь мы готовы взаимодействовать с нашей базой данных. Давайте создадим функцию, которая печатает имена баз данных в этом кластере. Часто полезно содержать эту логику в хорошо названных функциях, чтобы улучшить читаемость вашей кодовой базы. На протяжении этой серии мы будем создавать новые функции, аналогичные функциям, которые мы создаем здесь, когда мы учимся писать разные типы запросов. А сейчас давайте вызовем функцию с именем listDatabases()
.
Джава
xxxxxxxxxx
1
await listDatabases(client);
Давайте обернем наши вызовы функций, которые взаимодействуют с базой данных, в try/catch
оператор, чтобы мы могли обрабатывать любые непредвиденные ошибки.
Джава
xxxxxxxxxx
1
try {
2
await client.connect();
3
4
await listDatabases(client);
5
6
} catch (e) {
7
console.error(e);
8
}
Мы хотим быть уверены , что мы закрываем подключение к нашей группе, поэтому мы заканчиваем try/catch
с finally
заявлением.
Джава
xxxxxxxxxx
1
finally {
2
await client.close();
3
}
Как только мы main()
написали нашу функцию, нам нужно ее вызвать. Давайте отправим ошибки на консоль.
Джава
xxxxxxxxxx
1
main().catch(console.error);
Собрав все вместе, наша main()
функция и наш вызов будут выглядеть примерно так:
Джава
xxxxxxxxxx
1
async function main(){
2
/**
3
* Connection URI. Update <username>, <password>, and <your-cluster-url> to reflect your cluster.
4
* See https://docs.mongodb.com/ecosystem/drivers/node/ for more details
5
*/
6
const uri = "mongodb+srv://<username>:<password>@<your-cluster-url>/test?retryWrites=true&w=majority";
7
8
9
const client = new MongoClient(uri);
10
11
try {
12
// Connect to the MongoDB cluster
13
await client.connect();
14
15
// Make the appropriate DB calls
16
await listDatabases(client);
17
18
} catch (e) {
19
console.error(e);
20
} finally {
21
await client.close();
22
}
23
}
24
25
main().catch(console.error);
Перечислите базы данных в нашем кластере
В предыдущем разделе мы ссылались на listDatabases()
функцию. Давайте реализуем это!
Эта функция извлечет список баз данных в нашем кластере и напечатает результаты в консоли.
Джава
xxxxxxxxxx
1
async function listDatabases(client){
2
databasesList = await client.db().admin().listDatabases();
3
4
console.log("Databases:");
5
databasesList.databases.forEach(db => console.log(` - ${db.name}`));
6
};
Сохраните ваш файл
Вы реализовали много кода. Сохраните изменения и назовите файл как-нибудь так connection.js
. Чтобы увидеть копию всего файла, посетите GitHub-репозиторий nodejs-quickstart .
Выполните ваш скрипт Node.js
Теперь вы готовы протестировать свой код! Выполните ваш скрипт, выполнив команду, подобную следующей в вашем терминале:node connection.js
Вы увидите вывод, подобный следующему:
Джава
xxxxxxxxxx
1
Databases:
- sample_airbnb
- sample_geospatial
- sample_mflix
- sample_supplies
- sample_training
- sample_weatherdata
- admin
- local
What’s Next?
Today, you were able to connect to a MongoDB database from a Node.js script, retrieve a list of databases in your cluster, and view the results in your console. Nice!
In future posts in this series, we’ll dive into each of the CRUD (create, read, update, and delete) operations as well as topics like change streams, transactions, and the aggregation pipeline, so you’ll have the tools you need to successfully interact with data in your databases.
Series Versions
The examples in this article were created with the following application versions:
Stay tuned for the rest of the series!