Atualizado: 02/01/2025

Iniciando com MongoDB - Node.js

Atualmente, a plataforma mais popular para gerenciamento de banco de dados em Node.js é o MongoDB. Para trabalhar com esta plataforma, primeiro é necessário instalar o servidor MongoDB. Para mais detalhes sobre como fazer isso, é descrito aqui. Além do servidor Mongo, precisamos do driver para interagir com o Node.js.

Ao conectar e interagir com o banco de dados no MongoDB, podemos identificar as seguintes etapas:

  • Conexão ao servidor

  • Obtenção do objeto do banco de dados no servidor

  • Obtenção do objeto da coleção no banco de dados

  • Interação com a coleção (adição, remoção, obtenção e alteração de dados)

Vamos criar um novo projeto. Para isso, definimos um novo diretório chamado mongoapp. Em seguida, navegamos até este diretório no terminal e instalamos o pacote mongodb:

npm install mongodb

Vale ressaltar que, no momento da escrita deste tema, a versão atual do driver é 6.8.0. Entre versões e até subversões, às vezes, existem algumas diferenças. E nesse sentido, a funcionalidade do driver muda com frequência. No entanto, aspectos gerais geralmente permanecem constantes. Todas as informações de referência necessárias sobre este driver específico podem ser encontradas em driver.

Conectando ao Banco de Dados

Antes de conectar ao MongoDB a partir de uma aplicação Node.js, precisamos primeiro iniciar o servidor MongoDB.

A classe chave para trabalhar com MongoDB é a classe MongoClient, através da qual todas as interações com o armazenamento de dados serão realizadas. Primeiro, precisamos obter o MongoClient:

const MongoClient = require("mongodb").MongoClient;

No construtor do MongoClient, passamos a string de conexão ao servidor:

const url = "mongodb://user:password@host:port/?options";

Elementos da string de conexão:

  • Protocolo: geralmente "mongodb".

  • Nome de usuário e senha (se necessário): "user:password".

  • Host e porta onde o servidor MongoDB está em execução: "host:port".

  • Parâmetros adicionais de conexão: após o ponto de interrogação ?.

Por exemplo, para conectar a um servidor MongoDB local em execução no endereço padrão 127.0.0.1:27017:

const MongoClient = require("mongodb").MongoClient;

const url = "mongodb://127.0.0.1:27017/";
const mongoClient = new MongoClient(url);

Para conectar ao servidor MongoDB, usamos o método connect():

mongoClient.connect().then(client => {
    console.log("Conexão estabelecida");
    console.log(client.options.dbName); // obtém o nome do banco de dados
});

O método then() recebe uma função que é chamada quando o MongoClient se conecta. Para testar, usamos a propriedade client.options.dbName para imprimir o nome do banco de dados ao qual estamos conectados (por padrão, o banco de dados é "test").

Para fechar a conexão ao finalizar o trabalho com o banco de dados, usamos o método close():

client.connect().then(client => {
    console.log("Conexão estabelecida");
    // realiza operações com o banco de dados MongoDB
    client.close().then(() => console.log("Conexão fechada"));
});

O método close() também retorna uma Promise, permitindo que chamemos o método then() para executar uma função ao fechar a conexão.

No entanto, organizar toda a lógica de interação através de chamadas then() pode ser inconveniente. Podemos usar outro método com async/await:

const MongoClient = require("mongodb").MongoClient;

const mongoClient = new MongoClient("mongodb://127.0.0.1:27017/");
async function run() {
    try {
        await mongoClient.connect();
        console.log("Conexão estabelecida");
        // interações com o banco de dados
    } catch (err) {
        console.log(err);
    } finally {
        await mongoClient.close();
        console.log("Conexão fechada");
    }
}
run().catch(console.log);

Obtendo o Banco de Dados

Após conectar ao servidor, podemos acessar o banco de dados. Para isso, usamos o método:

O método recebe como parâmetro o nome do banco de dados ao qual queremos nos conectar. O resultado é um objeto do banco de dados, através do qual podemos acessar os dados.

Para exemplificar, faremos um ping ao banco de dados "admin", que existe por padrão no servidor MongoDB:

const MongoClient = require("mongodb").MongoClient;

const mongoClient = new MongoClient("mongodb://127.0.0.1:27017/");
async function run() {
    try {
        await mongoClient.connect();
        const db = mongoClient.db("admin");
        const result = await db.command({ ping: 1 });
        console.log("Conexão com o servidor estabelecida com sucesso");
        console.log(result);
    } catch (err) {
        console.log("Erro ocorrido");
        console.log(err);
    } finally {
        await mongoClient.close();
        console.log("Conexão fechada");
    }
}
run().catch(console.error);

Para executar comandos de diagnóstico como o ping, o objeto do banco de dados Db fornece o método command, que aceita um objeto de diagnóstico como parâmetro. Por exemplo, {ping: 1} indica que queremos executar um ping no banco de dados.

No MongoDB, os dados são armazenados em coleções em vez de tabelas. Para interagir com o banco de dados (adicionar, remover, ler dados), precisamos obter o objeto da coleção usando o método db.collection("nome_da_colecao"), que retorna um objeto da classe Collection para interagir com a coleção.

Ao contrário das tabelas em sistemas relacionais, onde todos os dados são armazenados em linhas, nas coleções do MongoDB, os dados são armazenados em documentos. Por exemplo, podemos acessar uma coleção em um banco de dados:

const MongoClient = require("mongodb").MongoClient;

const mongoClient = new MongoClient("mongodb://127.0.0.1:27017/");
async function run() {
    try {
        await mongoClient.connect();
        const db = mongoClient.db("usersdb");
        const collection = db.collection("users");
        const count = await collection.countDocuments();
        console.log(`A coleção users contém ${count} documentos`);
    } catch (err) {
        console.log(err);
    } finally {
        await mongoClient.close();
    }
}
run().catch(console.error);

Aqui, usamos o banco de dados "usersdb". Mesmo que não exista por padrão no servidor MongoDB, ele será criado automaticamente ao ser acessado pela primeira vez.

Após a conexão, acessamos a coleção "users":

const collection = db.collection("users");

Da mesma forma, a coleção será criada automaticamente ao ser acessada pela primeira vez.

Com a coleção obtida, podemos usar seus métodos. Neste exemplo, usamos o método countDocuments() para obter o número de documentos na coleção. Este método retorna uma Promise, da qual podemos obter o resultado da operação, ou seja, a contagem de documentos.

console.log(`A coleção users contém ${count} documentos`);
Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com