Как Запрашивать Документы В MongoDB С Помощью NodeJS?

MongoDB - популярная база данных NoSQL, которая обеспечивает гибкое и масштабируемое хранение данных. NodeJS и JavaScript runtime созданы на основе JavaScript-движка Chrome версии 8. Он часто используется вместе с MongoDB для создания мощных и эффективных приложений. В этой статье мы расскажем вам, как запрашивать документы в MongoDB с помощью Node.js. Мы рассмотрим различные подходы и дадим пошаговые инструкции по настройке приложения.

Предпосылки

  • NodeJS
  • MongoDB
  • NodeJS и MongoDB установлены в вашей локальной системе.

Подход 1. Использование обратных вызовов

Обратные вызовы - это традиционный метод обработки асинхронных операций в NodeJS. Функция обратного вызова может быть передана в качестве аргумента другой функции и выполняется после завершения выполнения первой функции.

Синтаксис

const MongoClient = require('mongodb').MongoClient; 
const URL = 'mongodb://localhost:27017'; 
const dbName = 'mydatabase'; 

MongoClient.connect(url, function (err, client) { 
    if (err) throw err; // Обработка ошибок соединения 
    const db = client.db(dbName); 
    db.collection('mycollection').find({}). toArray(function (err, result) { 
        if (err) throw err; // Обрабатываем ошибки запроса 
        console.log(result); // Распечатываем результаты 
        client.close(); // Закрываем соединение 
    } 
);

Объяснение

  • MongoClient.connect() : эта функция может подключаться к серверу MongoDB. Если соединение установлено успешно, клиентский объект передается функции обратного вызова.
  • client.db(dbName) : он может установить выбор базы данных.
  • db.collection('mycollection').find({}).toArray(function(err, result) : он может запрашивать коллекцию и преобразовывать результат в массив, передавая его в функцию обратного вызова.
  • client.close : Закрыть соединение с базой данных.

Подход 2: Использование Promises

Promises могут обеспечить более гибкий способ обработки асинхронных операций. Это может обеспечить лучшую читаемость и обработку ошибок. Они являются цепочечными и упрощают управление несколькими асинхронными операциями.

Синтаксис

const MongoClient = require('mongodb').MongoClient; 
const URL = 'mongodb://localhost:27017'; 
const dbName = 'mydatabase'; 

MongoClient.connect(url) 
    .then(client => { 
        const db = client.db(dbName); 
        return db.collection('mycollection').find({}).toArray(); 
    }) 
    .then(result = > { 
        console.log(result); // Распечатываем результаты 
    }) 
    .catch(err => { 
        console.error(err); // Обрабатываем ошибки 
    });

Объяснение:

  • MongoClient.connect(url) : подключается к серверу MongoDB и возвращает обещание.
  • .then(client => {…}) ; Он может выполняться после успешного соединения и передачи клиентского объекта следующей функции.
  • db.collection('mycollection').find({}).toArray() : он может запрашивать коллекцию и возвращать обещание, которое разрешается с помощью массива результатов.
  • .then(result => {…}) : он может выполняться после успешного выполнения запроса, а затем передавать массив следующей функции.
  • console.log(result) : выводит результат на консоль.

Подход 3. Использование Async/Await

Async/Await - это современный подход к обработке асинхронных операций в JavaScript, представленный в ES8. Он позволяет писать асинхронный код в синхронном стиле. что делает его более читаемым и простым в отладке.

Синтаксис

const { MongoClient } = require('mongodb');
const url = 'mongodb://localhost:27017';
const dbName = 'mydatabase';

async function queryDatabase() {
    const client = new MongoClient(url);
    try {
        await client.connect(); // Connect to the MongoDB server
        const db = client.db(dbName);
        const result = await db.collection('mycollection').find({}).toArray(); // Query the collection
        console.log(result); // Print the results
    } catch (err) {
        console.error(err); // Handle errors
    } finally {
        await client.close(); // Close the connection
    }
}

queryDatabase();

Объяснение

  • async function queryDatabase() {…} : она может определять асинхронную функцию.
  • const client = new MongoClient(url) : Создаёт новый экземпляр MongoClient.
  • await client.connect() : подключается к серверу MongoDB. Ключевое слово await может приостановить выполнение до тех пор, пока соединение не будет завершено.
  • const result = await db.collection('mycollection').find({}).toArray() : он может запрашивать коллекцию и преобразовывать результат в массив.
  • finally { await client.close() } : он может гарантировать закрытие соединения с базой данных независимо от того, произошла ли ошибка.

Шаги Для Запроса Документов В MongoDB

Шаг 1. Инициализируйте новый проект Node.js, используя следующую команду.

npm init -y

Инициализируйте проект

Шаг 2. Установите необходимый модуль MongoDB.

npm i mongodb

запрос2

Структура папок

запрос4

"dependencies": {    "mongodb": "^6.8.0"  }

Пример: Запрос документов с использованием асинхронного ожидания.

JavaScript //index.js

const { MongoClient } = require('mongodb');
const url = 'mongodb://localhost:27017';
const dbName = 'oauth-server';

async function queryDatabase() {
    const client = new MongoClient(url);
    try {
        await client.connect();
        const db = client.db(dbName);
        const result = await db.collection('clients').find({}).toArray();
        console.log(result);
    } catch (err) {
        console.error(err);
    } finally {
        await client.close();
    }
}

queryDatabase();

Запустите приложение, используя следующую команду.

node index.js

Вывод

запрос3

Этот пример проекта может продемонстрировать, как запрашивать документы в MongoDB с помощью проекта Node.js.