Ordem de comparação/classificação
Nesta página
Ao comparar valores de diferentes tipos de BSON em operações de ordenação, o MongoDB usa a seguinte ordem de comparação, da menor para a maior:
MinKey (tipo interno)
Zero
Números (inteiros, longos, doubles, decimais)
Símbolo, string
Objeto
Array
BinData
ObjectId
Boolean
Data
Timestamp
Expressão regular
MaxKey (tipo interno)
Observação
$range operadores de query e aggregation executam comparações somente em campos onde o tipo JSON corresponde ao tipo de valor da query. O MongoDB oferece suporte à comparação limitada entre BSON por meio de colchetes de tipo.
Tipos Numéricos
O MongoDB trata alguns tipos como equivalentes para fins de comparação. Por exemplo, tipos numéricos passam por conversão antes da comparação.
Strings
Comparação de Binários
Por padrão, o MongoDB usa a comparação binária simples para comparar linhas.
Agrupamentos
Novidade na versão 3.4.
A colocação permite que os usuários especifiquem regras específicas do idioma para comparação de strings, como regras para letras maiúsculas e marcas de acento.
A especificação de correlação tem a seguinte sintaxe:
{ locale: <string>, caseLevel: <boolean>, caseFirst: <string>, strength: <int>, numericOrdering: <boolean>, alternate: <string>, maxVariable: <string>, backwards: <boolean> }
Ao especificar agrupamento, o campo locale
é obrigatório; todos os outros campos de agrupamento são opcionais. Para obter descrições dos campos, consulte Documento de agrupamento.
Se nenhum agrupamento for especificado para a coleção ou para as operações, o MongoDB usa a comparação binária simples usada nas versões anteriores para comparações de strings.
arrays
Em comparações de arrays:
Uma comparação menor que, ou uma classificação ascendente, compara os menores elementos da array de acordo com a ordem de classificação do tipo de BSON.
Uma comparação maior que, ou uma classificação decrescente, compara os maiores elementos da array de acordo com a ordem de classificação inversa do tipo BSON.
Ao comparar um campo cujo valor é uma matriz de um elemento (por exemplo,
[ 1 ]
) com campos não-array (por exemplo,2
), a comparação é de1
e2
.Uma comparação de uma array vazia (exemplo,
[ ]
) considera a array vazia como menor que um valor denull
ou um valor de campo ausente.
Objetos
A comparação do MongoDB de objetos BSON usa a seguinte ordem:
Compare recursivamente os pares de valores-chave na ordem em que aparecem no objeto BSON.
Compare os tipos de campo. O MongoDB utiliza a seguinte ordem de comparação para tipos de campo, do mais baixo para o mais alto:
MinKey (tipo interno)
Zero
Números (inteiros, longos, doubles, decimais)
Símbolo, string
Objeto
Array
BinData
ObjectId
Boolean
Data
Timestamp
Expressão regular
MaxKey (tipo interno)
Se os tipos de campo forem iguais, compare os nomes dos campos principais.
Se os nomes dos campos-chave forem iguais, compare os valores dos campos.
Se os valores de campo forem iguais, compare o próximo par chave/valor (retornar à etapa 1). Um objeto sem pares adicionais é menor que um objeto com pares adicionais.
Datas e Registros de Data e Hora
Os objetos data são classificados antes dos objetos de Registro de data e hora.
Non-existent Fields
A comparação trata um campo inexistente como se fosse um objeto BSON vazio. Como tal, uma classificação no campo a
em documentos { }
e {
a: null }
trataria os documentos como equivalentes em ordem de classificação.
BinData
O MongoDB classifica BinData
na seguinte ordem:
Primeiro, o comprimento ou tamanho dos dados.
Em seguida, pelo subtipo de um byte BSON.
Finalmente, pelos dados, realizando uma comparação byte-by-byte.