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
Código JavaScript
MaxKey (tipo interno)
Observação
Os operadores de query de faixa executam comparações somente em campos em que o tipo de BSON corresponde ao tipo de valor da query. O MongoDB impõe comparações com Operadores de query de comparação somente em documentos em que o tipo BSON do campo de destino corresponde ao tipo de operando de query por meio de bracketing 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
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 classificação ascendente compara os menores elementos da array de acordo com a ordem de classificação do tipo de BSON.
Uma classificação decrescente compara os maiores elementos da array de acordo com a ordem de classificação inversa do tipo BSON.
Operadores de query de comparação , como
$lt
e$gt
, realizam comparações em arrays lexicograficamente.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 (por exemplo,
[ ]
) considera a array vazia como menor que um valor denull
ou um valor de campo ausente.Uma comparação de uma array aninhada (por exemplo,
[[1, 2], [3, 4]]
) compara qualquer array após a array mais externa lexicograficamente.
Observação
Os operadores de query de comparação impõem colchetes de tipo quando a query é uma array. Se o valor indexado for uma array, o operador executará uma comparação entre colchetes por elemento sobre a array indexada.
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
Código JavaScript
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 nulo. 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 em bytes não assinados.