Método compare()
compare()
Section titled “compare()”Filtra registros usando operadores de comparação (>, <, >=, <=, ==, !=) em valores numéricos ou de data.
Sintaxe
Section titled “Sintaxe”await db.compare(field, operator, value)Parâmetros
Section titled “Parâmetros”field(string): Nome da propriedade a ser comparadaoperator(string): Operador de comparação (>,<,>=,<=,==,!=)value(any): Valor para comparação
Retorno
Section titled “Retorno”Retorna um array com os registros que atendem à condição especificada.
Exemplos
Section titled “Exemplos”Comparação de Números
Section titled “Comparação de Números”const produtos = [ { id: 1, nome: `Laptop`, preco: 2500.00 }, { id: 2, nome: `Mouse`, preco: 50.00 }, { id: 3, nome: `Teclado`, preco: 150.00 }, { id: 4, nome: `Monitor`, preco: 800.00 }, { id: 5, nome: `Webcam`, preco: 200.00 }];
await db.set(`produtos`, produtos);
// Produtos com preço maior que 200const caros = await db.compare(`preco`, `>`, 200);console.log(caros.length); // 3
// Produtos com preço menor ou igual a 200const baratos = await db.compare(`preco`, `<=`, 200);console.log(baratos.length); // 3
// Produtos com preço exatamente 150const exato = await db.compare(`preco`, `==`, 150);console.log(exato.length); // 1Comparação de Idades
Section titled “Comparação de Idades”const funcionarios = [ { nome: `João`, idade: 25, salario: 5000 }, { nome: `Maria`, idade: 32, salario: 7000 }, { nome: `Pedro`, idade: 28, salario: 6000 }, { nome: `Ana`, idade: 35, salario: 8000 }, { nome: `Carlos`, idade: 22, salario: 4000 }];
await db.set(`funcionarios`, funcionarios);
// Funcionários com mais de 30 anosconst senior = await db.compare(`idade`, `>`, 30);console.log(senior.map(f => f.nome)); // [`Maria`, `Ana`]
// Funcionários jovens (até 25 anos)const jovens = await db.compare(`idade`, `<=`, 25);console.log(jovens.map(f => f.nome)); // [`João`, `Carlos`]
// Funcionários que não têm 28 anosconst nao28 = await db.compare(`idade`, `!=`, 28);console.log(nao28.length); // 4Comparação de Datas
Section titled “Comparação de Datas”const eventos = [ { nome: `Reunião`, data: new Date(`2024-01-15`), participantes: 10 }, { nome: `Workshop`, data: new Date(`2024-02-20`), participantes: 25 }, { nome: `Conferência`, data: new Date(`2024-03-10`), participantes: 100 }, { nome: `Treinamento`, data: new Date(`2024-01-30`), participantes: 15 }];
await db.set(`eventos`, eventos);
// Eventos após 1º de fevereiroconst dataLimite = new Date(`2024-02-01`);const eventosFuturos = await db.compare(`data`, `>`, dataLimite);console.log(eventosFuturos.length); // 2
// Eventos até o final de janeiroconst fimJaneiro = new Date(`2024-01-31`);const eventosJaneiro = await db.compare(`data`, `<=`, fimJaneiro);console.log(eventosJaneiro.length); // 2Comparação de Scores/Pontuações
Section titled “Comparação de Scores/Pontuações”const jogadores = [ { nome: `João`, score: 1500, nivel: 10 }, { nome: `Maria`, score: 2300, nivel: 15 }, { nome: `Pedro`, score: 800, nivel: 5 }, { nome: `Ana`, score: 3200, nivel: 20 }, { nome: `Carlos`, score: 1200, nivel: 8 }];
await db.set(`jogadores`, jogadores);
// Jogadores com score alto (>= 2000)const topPlayers = await db.compare(`score`, `>=`, 2000);console.log(topPlayers.map(j => `${j.nome}: ${j.score}`));
// Jogadores iniciantes (nivel < 10)const iniciantes = await db.compare(`nivel`, `<`, 10);console.log(iniciantes.length); // 2Comparação de Quantidades em Estoque
Section titled “Comparação de Quantidades em Estoque”const estoque = [ { produto: `Laptop`, quantidade: 5, minimo: 3 }, { produto: `Mouse`, quantidade: 50, minimo: 20 }, { produto: `Teclado`, quantidade: 2, minimo: 5 }, { produto: `Monitor`, quantidade: 8, minimo: 2 }, { produto: `Webcam`, quantidade: 0, minimo: 1 }];
await db.set(`estoque`, estoque);
// Produtos em falta (quantidade <= 0)const emFalta = await db.compare(`quantidade`, `<=`, 0);console.log(emFalta.map(p => p.produto)); // [`Webcam`]
// Produtos com estoque baixo (quantidade < minimo)const estoqueBaixo = await db.compare(`quantidade`, `<`, 5);console.log(estoqueBaixo.map(p => p.produto)); // [`Teclado`, `Webcam`]
// Produtos com bom estoque (quantidade >= 10)const bomEstoque = await db.compare(`quantidade`, `>=`, 10);console.log(bomEstoque.length); // 1Filtragem de Vendas por Período
Section titled “Filtragem de Vendas por Período”const vendas = [ { id: 1, valor: 500, mes: 1, ano: 2024 }, { id: 2, valor: 1200, mes: 2, ano: 2024 }, { id: 3, valor: 800, mes: 3, ano: 2024 }, { id: 4, valor: 2000, mes: 1, ano: 2023 }, { id: 5, valor: 300, mes: 4, ano: 2024 }];
await db.set(`vendas`, vendas);
// Vendas de 2024const vendas2024 = await db.compare(`ano`, `==`, 2024);console.log(vendas2024.length); // 4
// Vendas acima de R$ 1000const vendasAltas = await db.compare(`valor`, `>`, 1000);console.log(vendasAltas.length); // 2
// Vendas do primeiro trimestre (mês <= 3)const primeiroTrimestre = await db.compare(`mes`, `<=`, 3);console.log(primeiroTrimestre.length); // 4Comparações Múltiplas
Section titled “Comparações Múltiplas”// Função para aplicar múltiplas comparaçõesasync function filtroMultiplo(chave, filtros) { let dados = await db.get(chave);
for (const filtro of filtros) { const { field, operator, value } = filtro; const filtrados = await db.compare(field, operator, value);
// Intersecção dos resultados dados = dados.filter(item => filtrados.some(f => f.id === item.id) ); }
return dados;}
// Exemplo: Funcionários seniores com alto salárioconst filtros = [ { field: `idade`, operator: `>`, value: 30 }, { field: `salario`, operator: `>=`, value: 7000 }];
const funcionariosSeniorSalarioAlto = await filtroMultiplo(`funcionarios`, filtros);console.log(funcionariosSeniorSalarioAlto);Estatísticas com Comparações
Section titled “Estatísticas com Comparações”// Função para obter estatísticas baseadas em comparaçõesasync function obterEstatisticas(chave, campo) { const dados = await db.get(chave); const valores = dados.map(item => item[campo]).filter(v => typeof v === `number`);
if (valores.length === 0) return null;
const min = Math.min(...valores); const max = Math.max(...valores); const media = valores.reduce((a, b) => a + b) / valores.length;
const acimaDaMedia = await db.compare(campo, `>`, media); const abaixoDaMedia = await db.compare(campo, `<`, media);
return { min, max, media: Math.round(media * 100) / 100, total: valores.length, acimaDaMedia: acimaDaMedia.length, abaixoDaMedia: abaixoDaMedia.length };}
const statsPrecos = await obterEstatisticas(`produtos`, `preco`);const statsIdades = await obterEstatisticas(`funcionarios`, `idade`);- Funciona com números, datas e strings (comparação lexicográfica)
- Para datas, use objetos Date() para comparação adequada
- Operadores suportados:
>,<,>=,<=,==,!= - Retorna array vazio se nenhum registro atender à condição
- Para strings, a comparação é lexicográfica (ordem alfabética)
- Se a chave não existir, retorna um array vazio
- Se o campo não existir no registro, o registro é ignorado