Al comparar valores de diferentes BSON types en operaciones de clasificación, MongoDB utiliza el siguiente orden de comparación, de menor a mayor:
MinKey (tipo interno)
Nulo
Números (enteros, largos, dobles, decimales)
Símbolo, string
Objeto
Arreglo
BinData
ObjectId
Booleano
fecha
Marca de tiempo
Expresión regular
Código JavaScript
Código JavaScript con alcance
MaxKey (tipo interno)
Las expresiones de agregación hacen comparaciones entre tipos. Para obtener más información, consulta Operadores de expresión de comparación.
Nota
MongoDB aplica comparaciones con operadores del query de comparación únicamente en documentos donde el tipo BSON del campo de destino coincide con el tipo de operando del query a través de TIPO DE SELECCIÓN.
Tipos numéricos
MongoDB trata algunos tipos como equivalentes a efectos de comparación. Por ejemplo, todos los tipos numéricos se consideran equivalentes en las comparaciones.
Strings
Comparación binaria
Por defecto, MongoDB utiliza la comparación binaria simple para comparar cadenas.
Intercalación
La intercalación permite a los usuarios especificar reglas propias del lenguaje para la comparación de strings, como reglas para el uso de mayúsculas y minúsculas y marcas de acento.
La especificación de intercalación tiene la siguiente sintaxis:
{ locale: <string>, caseLevel: <boolean>, caseFirst: <string>, strength: <int>, numericOrdering: <boolean>, alternate: <string>, maxVariable: <string>, backwards: <boolean> }
Al especificar la intercalación, el locale Este campo es obligatorio; todos los demás campos de intercalación son opcionales. Para obtener descripciones de los campos, consulta documento de intercalación.
Si no se especifica ninguna intercalación para la colección o para las operaciones, MongoDB utiliza la comparación binaria simple usada en versiones anteriores para las comparaciones de strings.
Arreglos
En comparaciones de arreglos:
Un orden ascendente compara los elementos más pequeños del arreglo según el orden de clasificación del tipo BSON.
Un ordenamiento descendente compara los elementos más grandes del arreglo según el orden de ordenamiento inverso del tipo BSON.
Operadores de comparación de consultas, como
$lty$gt, realizan comparaciones en arreglos de manera lexicográfica.Cuando se compara un campo cuyo valor es un arreglo de un solo elemento (por ejemplo,
[ 1 ]) con campos que no son arreglos (por ejemplo,2), la comparación es para1y2.Una comparación de un arreglo vacío (por ejemplo,
[ ]) considera el arreglo vacío como menor que un valornullo un valor de campo faltante.Una comparación de un arreglo anidado (por ejemplo,
[[1, 2], [3, 4]]) compara cualquier arreglo después del arreglo más externo de forma lexicográfica.
Nota
Los operadores del query de comparación aplican el encuadre de tipos cuando el query es un arreglo. Si el valor indexado es un arreglo, el operador realiza una comparación tipo corchete elemento por elemento sobre el arreglo indexado.
objeto
La comparación de MongoDB de los objetos BSON utiliza el siguiente orden:
Compara recursivamente los pares clave-valor en el orden en que aparecen dentro del objeto BSON.
Compara los tipos de campo. MongoDB utiliza el siguiente orden de comparación para los tipos de campos, de menor a mayor:
MinKey (tipo interno)
Nulo
Números (enteros, largos, dobles, decimales)
Símbolo, string
Objeto
Arreglo
BinData
ObjectId
Booleano
fecha
Marca de tiempo
Expresión regular
Código JavaScript
Código JavaScript con alcance
MaxKey (tipo interno)
Si los tipos de campo son iguales, compara los nombres de los campos clave.
Si los nombres de los campos clave son iguales, compára los valores de los campos.
Si los valores de los campos son iguales, compara el siguiente par clave/valor (vuelve al paso 1). Un objeto sin pares adicionales es inferior a un objeto con pares adicionales.
Fechas y marcas de tiempo
Los objetos de fecha se ordenan antes que los objetos de marca de tiempo.
Non-existent Fields
La comparación trata un campo inexistente como si fuera nulo. Una ordenación en el campo a en los documentos { } y { a: null } trataría a los documentos como equivalentes en el orden de ordenación.
BinData
MongoDB ordena BinData en el siguiente orden:
Primero, la longitud o el tamaño de los datos.
Luego, por el subtipo BSON de un solo byte.
Finalmente, mediante los datos, realizando una comparación byte a byte sobre bytes sin signo.