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
Range query operators perform comparisons only on fields where the BSON type matches the query value's type. MongoDB enforces comparisons with Comparison Query Operators only on documents where the BSON type of the target field matches the query operand type through Type Bracketing.
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:
An ascending sort compares the smallest elements of the array according to the BSON type sort order.
A descending sort compares the largest elements of the array according to the reverse BSON type sort order.
Comparison Query Operators, such as
$lt
and$gt
, perform comparisons on arrays lexicographically.When comparing a field whose value is a one element array (for example,
[ 1 ]
) with non-array fields (for example,2
), the comparison is for1
and2
.A comparison of an empty array (for example,
[ ]
) considers the empty array as less than anull
value or a missing field value.A comparison of a nested array (for example,
[[1, 2], [3, 4]]
) compares any array after the outmost array lexicographically.
Observação
Comparison Query Operators enforce type-bracketing when the query is an array. If the indexed value is an array, the operator performs a type-bracketed comparison element-wise over the indexed array.
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
The comparison treats a non-existent field as if it were null. A sort on the a
field in documents { }
and { a: null }
would treat the documents as equivalent in sort order.
BinData
O MongoDB classifica BinData
na seguinte ordem:
Primeiro, o comprimento ou tamanho dos dados.
Em seguida, pelo subtipo de um byte BSON.
Finally, by the data, performing a byte-by-byte comparison on unsigned bytes.