Atualizado: 02/01/2025

Trabalhando com Mongoose - Node.js

Mongoose é uma biblioteca ODM (Object Data Modelling) especializada para trabalhar com MongoDB, que permite mapear objetos de classes para documentos de coleções no banco de dados. Grosso modo, Mongoose funciona de maneira semelhante às ferramentas ORM (Object Relational Mapping). O site oficial da biblioteca, onde você pode encontrar toda a documentação necessária, é mongoosejs.com.

Para trabalhar com Mongoose, continuaremos o projeto das sessões anteriores e, primeiramente, instalaremos a biblioteca usando o comando:

npm install mongoose --save

Em seguida, definiremos o seguinte código no arquivo app.js da aplicação:

const mongoose = require("mongoose");
const Schema = mongoose.Schema;

// Definindo o esquema
const userSchema = new Schema({
    name: String,
    age: Number
});

// Definindo o modelo User
const User = mongoose.model("User", userSchema);

// Criando um objeto do modelo User
const user = new User({ name: "Bill", age: 41 });

async function main() {
    // Conectando ao banco de dados
    await mongoose.connect("mongodb://127.0.0.1:27017/usersdb");

    // Salvando o modelo user no banco de dados
    await user.save();
    console.log("Objeto salvo:", user);

    // Desconectando do banco de dados
    await mongoose.disconnect();
}

// Iniciando a conexão e a interação com o banco de dados
main().catch(console.log);

Primeiramente, precisamos conectar o mongoose:

const mongoose = require("mongoose");

Os dados utilizados no Mongoose são descritos por um esquema específico. Por exemplo, nas sessões anteriores, salvamos no banco de dados objetos com duas propriedades: name e age. Portanto, definimos o seguinte esquema:

const Schema = mongoose.Schema;

// Definindo o esquema
const userSchema = new Schema({
    name: String,
    age: Number
});

O esquema contém metadados dos objetos. Aqui, definimos quais propriedades o objeto terá e qual será o tipo de dados de cada propriedade. Ou seja, este é o esquema que descreve o objeto usuário.

Em seguida, usando este esquema, criamos o modelo do usuário:

const User = mongoose.model("User", userSchema);

O primeiro parâmetro do método mongoose.model indica o nome do modelo. O Mongoose, então, buscará automaticamente no banco de dados uma coleção cujo nome corresponda ao nome do modelo no plural. Por exemplo, neste caso, o nome do modelo é User. No plural, em inglês, isso se torna users. Portanto, ao trabalhar com os dados do modelo User (adicionar, remover, editar e obter objetos), o Mongoose acessará a coleção users. Se essa coleção existir no banco de dados, a interação ocorrerá com ela. Caso contrário, ela será criada automaticamente.

O segundo parâmetro da função mongoose.model é o próprio esquema.

Agora podemos criar objetos desse modelo:

const user = new User({
  name: "Bill",
  age: 41
});

A lógica principal está concentrada na função assíncrona main. Para trabalhar com o banco de dados MongoDB, precisamos nos conectar a ele. Para conectar, usamos o método mongoose.connect(), passando o endereço do banco de dados no servidor MongoDB:

await mongoose.connect("mongodb://127.0.0.1:27017/usersdb");

Esse método retorna um objeto Promise, então, ao chamar o método em uma função assíncrona, podemos usar o operador await.

Em seguida, chamamos o método save do objeto. Este método está definido para todos os modelos criados e salva o objeto atual no banco de dados:

await user.save();
console.log("Objeto salvo:", user);

Usamos o método mongoose.disconnect(); para desconectar do banco de dados.

Como o método save retorna uma Promise, há uma outra forma de salvar o objeto:

user.save()
.then(() => {
  console.log("Objeto salvo:", user);
  return mongoose.disconnect();
})
.catch(err => {
  console.log(err);
  mongoose.disconnect();
});

Vamos executar a aplicação e adicionar o objeto:

Objeto salvo {
  name: 'Bill',
  age: 41,
  _id: new ObjectId("6377c17b71c0bd75cec4d488"),
  __v: 0
}
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