$cmp (Comparar)
Última atualização: 2026-10-09
$cmp (Comparar)
$cmp compara dois valores e retorna -1, 0 ou 1 para menor que, igual ou maior que. É o operador de comparação em forma de expressão, frequentemente usado para chaves de ordenação personalizadas ou verificações de tamanho dentro de $cond. As comparações seguem a ordem de tipos BSON, então comparar tipos diferentes não gera erro — os valores são ordenados pelo tipo. Diferente de $eq e $gt, que retornam booleanos, $cmp retorna um resultado triplo que se encaixa diretamente em lógica de ordenação ou ramificação.
| Categoria | Conjunto, Condição e Conversão |
|---|---|
| Versão do MongoDB | 1.0+ |
| Idioma do Exemplo | mongosh (Shell) |
📝 Sintaxe
{ $cmp: [ <expressão1>, <expressão2> ] }
⚙️ Parâmetros
| expressão 1 | A primeira expressão a comparar. |
|---|---|
| expressão 2 | A segunda expressão a comparar. |
Retorno:-1 quando o primeiro é menor, 0 quando igual, 1 quando maior
▶ Exemplo
Execute os comandos abaixo no seu mongosh local (requer um mongod em execução):
// $cmp: comparar duas pontuações
db.scores.aggregate([
{ $project: {
result: { $cmp: ['$scoreA', '$scoreB'] }
} }
])
Saída:
{ '_id': 1, 'result': 1 }
{ '_id': 2, 'result': -1 }
📌 Notas
- Retorna três valores (-1, 0, 1), não um booleano
- Tipos diferentes comparam pela ordem de tipos BSON sem gerar erro
- Null é ordenado antes dos números na ordem de tipos
🏷️ Tags Relacionados
💡 Casos Relacionados
Mais casos práticos em breve.
📚 Tutoriais Relacionados
❓ Perguntas Frequentes
QO que $cmp retorna?
A-1 quando o primeiro é menor, 0 quando igual e 1 quando maior.
QComo $cmp e $eq diferem?
A$eq retorna um booleano, enquanto $cmp retorna um resultado triplo adequado para ordenação e ramificação.
QO $cmp gera erro ao comparar tipos diferentes?
ANão — ele segue a ordem de tipos BSON, então strings são ordenadas depois dos números.