Método between()
between()
Section titled “between()”Busca valores numéricos que estão entre um valor mínimo e máximo (inclusive).
Sintaxe
Section titled “Sintaxe”await db.between(key, min, max, options)Parâmetros
Section titled “Parâmetros”- key (string): A chave ou padrão de busca
- min (number): Valor mínimo (inclusive)
- max (number): Valor máximo (inclusive)
- options (object, opcional): Opções de busca
Opções Disponíveis
Section titled “Opções Disponíveis”{ path: string, // Caminho para propriedade aninhada strict: boolean, // Busca exata apenas números limit: number, // Limite de resultados offset: number // Offset para paginação}Retorno
Section titled “Retorno”- Promise<Array>: Array com os resultados encontrados
Exemplos
Section titled “Exemplos”Busca Básica por Números
Section titled “Busca Básica por Números”// Definir alguns valoresawait db.set('score1', 85);await db.set('score2', 92);await db.set('score3', 78);await db.set('score4', 95);await db.set('score5', 88);
// Buscar scores entre 80 e 90const scores = await db.between('score', 80, 90);console.log(scores);// [// { key: 'score1', value: 85 },// { key: 'score5', value: 88 }// ]Busca com Propriedades Aninhadas
Section titled “Busca com Propriedades Aninhadas”// Dados de produtosawait db.set('produto1', { nome: 'Notebook', preco: 2500 });await db.set('produto2', { nome: 'Mouse', preco: 50 });await db.set('produto3', { nome: 'Teclado', preco: 150 });await db.set('produto4', { nome: 'Monitor', preco: 800 });
// Buscar produtos com preço entre 100 e 1000const produtos = await db.between('produto', 100, 1000, { path: 'preco'});
console.log(produtos);// [// { key: 'produto3', value: { nome: 'Teclado', preco: 150 } },// { key: 'produto4', value: { nome: 'Monitor', preco: 800 } }// ]Sistema de Avaliações
Section titled “Sistema de Avaliações”class SistemaAvaliacoes { constructor(db) { this.db = db; }
async adicionarAvaliacao(produtoId, userId, nota, comentario) { const avaliacaoId = `avaliacao_${Date.now()}`; await this.db.set(avaliacaoId, { produtoId, userId, nota, comentario, data: new Date() }); return avaliacaoId; }
// Buscar avaliações por faixa de nota async buscarPorNota(notaMin, notaMax) { return await this.db.between('avaliacao_', notaMin, notaMax, { path: 'nota' }); }
// Buscar avaliações positivas (4-5 estrelas) async buscarPositivas() { return await this.buscarPorNota(4, 5); }
// Buscar avaliações negativas (1-2 estrelas) async buscarNegativas() { return await this.buscarPorNota(1, 2); }
// Buscar avaliações neutras (3 estrelas) async buscarNeutras() { return await this.buscarPorNota(3, 3); }}
// Usoconst avaliacoes = new SistemaAvaliacoes(db);
await avaliacoes.adicionarAvaliacao('prod1', 'user1', 5, 'Excelente!');await avaliacoes.adicionarAvaliacao('prod1', 'user2', 2, 'Não gostei');await avaliacoes.adicionarAvaliacao('prod1', 'user3', 4, 'Muito bom');
const positivas = await avaliacoes.buscarPositivas();console.log(`${positivas.length} avaliações positivas encontradas`);Filtro de Idade
Section titled “Filtro de Idade”// Dados de usuáriosawait db.set('user1', { nome: 'Ana', idade: 25, ativo: true });await db.set('user2', { nome: 'Bruno', idade: 17, ativo: true });await db.set('user3', { nome: 'Carlos', idade: 35, ativo: false });await db.set('user4', { nome: 'Diana', idade: 22, ativo: true });
// Buscar usuários adultos (18 a 65 anos)const adultos = await db.between('user', 18, 65, { path: 'idade'});
console.log('Usuários adultos:', adultos.map(u => u.value.nome));// ['Ana', 'Carlos', 'Diana']
// Combinar com outros filtrosconst adultosAtivos = adultos.filter(user => user.value.ativo);console.log('Adultos ativos:', adultosAtivos.map(u => u.value.nome));// ['Ana', 'Diana']Sistema de Preços
Section titled “Sistema de Preços”class BuscaPrecos { constructor(db) { this.db = db; }
async buscarPorFaixaPreco(min, max, categoria = null) { let padrão = categoria ? `${categoria}_` : '';
const resultados = await this.db.between(padrão, min, max, { path: 'preco' });
return resultados.map(item => ({ id: item.key, ...item.value })); }
async buscarBaratos(limite = 100) { return await this.buscarPorFaixaPreco(0, limite); }
async buscarCusteioMedio(min = 100, max = 500) { return await this.buscarPorFaixaPreco(min, max); }
async buscarPremium(min = 500) { return await this.buscarPorFaixaPreco(min, Infinity); }
// Busca com múltiplas faixas async buscarPromocao() { const economicos = await this.buscarBaratos(50); const medios = await this.buscarCusteioMedio(200, 300);
return { economicos, medios, total: economicos.length + medios.length }; }}
// Usoconst busca = new BuscaPrecos(db);
// Adicionar produtosawait db.set('eletronico_1', { nome: 'Fone', preco: 80, categoria: 'audio' });await db.set('eletronico_2', { nome: 'Smartphone', preco: 1200, categoria: 'mobile' });await db.set('livro_1', { nome: 'JavaScript', preco: 45, categoria: 'programação' });
const baratos = await busca.buscarBaratos();console.log('Produtos baratos:', baratos);Análise de Performance
Section titled “Análise de Performance”async function analisarTemposResposta() { // Buscar requisições por tempo de resposta const lentas = await db.between('requisicao_', 1000, Infinity, { path: 'tempoResposta' });
const rapidas = await db.between('requisicao_', 0, 200, { path: 'tempoResposta' });
const medias = await db.between('requisicao_', 200, 1000, { path: 'tempoResposta' });
return { lentas: lentas.length, rapidas: rapidas.length, medias: medias.length, percentualLentas: (lentas.length / (lentas.length + rapidas.length + medias.length)) * 100 };}
// Salvar dados de requisiçõesawait db.set('requisicao_1', { url: '/api/users', tempoResposta: 150 });await db.set('requisicao_2', { url: '/api/products', tempoResposta: 2500 });await db.set('requisicao_3', { url: '/api/orders', tempoResposta: 300 });
const stats = await analisarTemposResposta();console.log('Análise de performance:', stats);Paginação com Between
Section titled “Paginação com Between”async function buscarProdutosPaginados(precoMin, precoMax, pagina = 1, itensPorPagina = 10) { const offset = (pagina - 1) * itensPorPagina;
const resultados = await db.between('produto', precoMin, precoMax, { path: 'preco', limit: itensPorPagina, offset: offset });
// Contar total para calcular páginas const total = await db.between('produto', precoMin, precoMax, { path: 'preco' });
return { dados: resultados, paginacao: { paginaAtual: pagina, itensPorPagina, totalItens: total.length, totalPaginas: Math.ceil(total.length / itensPorPagina) } };}
// Usoconst pagina1 = await buscarProdutosPaginados(100, 500, 1, 5);console.log('Página 1:', pagina1);Casos de Uso
Section titled “Casos de Uso”- Filtros de preço em e-commerce
- Busca por faixa etária
- Análise de performance (tempos de resposta)
- Sistemas de avaliação/rating
- Filtros de data/timestamp
- Análise de métricas numéricas
- Os valores min e max são inclusivos
- Funciona apenas com valores numéricos
- Use
pathpara propriedades aninhadas - Suporta paginação com
limiteoffset - Retorna array vazio se nenhum valor for encontrado
Performance
Section titled “Performance”- Otimizado para buscas em propriedades indexadas
- Para ranges grandes, considere usar índices
- Use
limitpara controlar uso de memória - Cache resultados frequentes para melhor performance