Como fazer consultas NoSQL no Node.js?
Consultas NoSQL são realizadas em bancos de dados não relacionais como o MongoDB. Ao contrário de bancos relacionais como o MySQL ou PostgreSQL, bancos NoSQL não utilizam SQL para realizar operações de leitura e escrita. O MongoDB é um banco NoSQL popular, e para interagir com ele no Node.js, utilizamos o Mongoose.
1. Instalando o Mongoose
Primeiro, instale o pacote mongoose
para facilitar a interação com o MongoDB:
npm install mongoose
2. Conectando ao MongoDB com Mongoose
No arquivo database.js
, crie a configuração de conexão com o MongoDB:
const mongoose = require('mongoose');
require('dotenv').config();
const MONGO_URI = process.env.MONGO_URI || 'mongodb://localhost:27017/meubanco';
mongoose.connect(MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true })
.then(() => console.log('Conectado ao MongoDB'))
.catch(err => console.error('Erro ao conectar ao MongoDB:', err));
module.exports = mongoose;
3. Definindo um Modelo de Dados com Mongoose
Com o Mongoose, podemos criar um modelo para mapear os documentos do MongoDB. Vamos criar um modelo de usuário:
const mongoose = require('mongoose');
const UsuarioSchema = new mongoose.Schema({
nome: { type: String, required: true },
email: { type: String, required: true, unique: true },
idade: { type: Number, required: true }
});
const Usuario = mongoose.model('Usuario', UsuarioSchema);
module.exports = Usuario;
4. Fazendo Consultas NoSQL com Mongoose
Agora que temos o modelo de dados, podemos realizar consultas NoSQL no MongoDB com Mongoose. Por exemplo, para buscar todos os usuários:
const Usuario = require('./Usuario');
Usuario.find()
.then(usuarios => console.log('Lista de usuários:', usuarios))
.catch(err => console.error('Erro ao buscar usuários:', err));
Filtrando Consultas com Condições
Você pode adicionar condições para filtrar os dados. Exemplo de consulta com filtro para buscar usuários com idade maior que 25:
Usuario.find({ idade: { $gt: 25 } })
.then(usuarios => console.log('Usuários com mais de 25 anos:', usuarios))
.catch(err => console.error('Erro ao buscar usuários:', err));
Consultas com Limitação de Campos
Se você quiser retornar apenas alguns campos dos documentos, use o método select
:
Usuario.find()
.select('nome email') // Retorna apenas os campos nome e email
.then(usuarios => console.log('Usuários:', usuarios))
.catch(err => console.error('Erro ao buscar usuários:', err));
5. Consultas com Ordenação e Paginação
O MongoDB oferece funcionalidades de ordenar e paginamento. Exemplo para ordenar os usuários por idade e paginar os resultados:
Usuario.find()
.sort({ idade: 1 }) // Ordena pela idade em ordem crescente
.skip(10) // Pula os 10 primeiros registros
.limit(10) // Limita a 10 registros por página
.then(usuarios => console.log('Usuários ordenados e paginados:', usuarios))
.catch(err => console.error('Erro ao buscar usuários:', err));
Conclusão
Com o Mongoose, o processo de consulta NoSQL no MongoDB se torna mais simples e organizado. Você pode realizar consultas filtradas, paginadas, ordenadas e com projeção de campos de forma eficiente.
Como o MongoDB e o Mongoose facilitam o trabalho com dados não estruturados?
O MongoDB, por ser um banco NoSQL, oferece flexibilidade na modelagem de dados, armazenando-os em documentos JSON-like. Aplicações como Twitter, eBay e Airbnb utilizam MongoDB para armazenar dados não estruturados e altamente escaláveis.
Ao utilizar o Mongoose, você ganha um poderoso ODM para facilitar a manipulação desses dados, além de realizar consultas complexas de forma simplificada e com a possibilidade de validar e transformar dados antes de salvar no banco.
Algumas aplicações:
- Gestão de usuários em plataformas de mídia social
- Armazenamento de registros em sistemas de IoT
- Aplicações com grandes volumes de dados não estruturados
- Criação de APIs dinâmicas e escaláveis
- Armazenamento de dados temporários e logs de eventos
Dicas para quem está começando
- Use
find
para realizar consultas simples efindOne
para buscar um único documento. - Aproveite a flexibilidade do MongoDB para armazenar dados sem um esquema rígido.
- Considere o uso de índices para acelerar consultas em campos de busca frequentes.
- Faça validações nos modelos para garantir a integridade dos dados.
- Utilize métodos de agregação do MongoDB para consultas mais complexas.

Henrique Almeida
Especialista em desenvolvimento backend usando Node.js e arquiteturas de microsserviços.
Mais sobre o autor