El filtrado por tipo es un filtro implícito que MongoDB aplica a los predicados de consulta: una comparación en un tipo BSON determinado solo coincide con valores de ese tipo. Por ejemplo, { a: { $gt: 0 } } significa "a es un número y a es mayor que 0".
¿Qué operadores escriben corchetes?
Los operadores de desigualdad ($gt, $gte, $lt y $lte) utilizan corchetes de tipo.
Las negaciones ($ne y $nin) no utilizan corchetes de tipo. Coinciden con valores de cualquier tipo. Por ejemplo, { a: { $ne: 2 } } también coincide con documentos donde a es una cadena o un objeto, además del tipo numérico en la comparación.
Utilice corchetes para comparaciones con números.
BSON tiene varios tipos numéricos: int, long, double y decimal. MongoDB los trata como equivalentes para la comparación, por lo que una comparación con un número coincide con valores de cualquier tipo numérico.
Por ejemplo, { a: { $gt: 0 } } coincide con los valores a de tipo int, long, double o decimal.
Corchetes de tipo y recorrido implícito de matrices
El uso de corchetes de tipo también se aplica cuando una comparación recorre una matriz implícitamente. Si el campo de destino es una matriz, la comparación coincide con los documentos donde al menos un elemento satisface la comparación y es del mismo tipo que el operando.
Por ejemplo, { a: { $gt: 3 } } coincide con { a: [ 1, 2, 3, 4 ] } y { a: [ "red", 4, "blue" ] }, pero no con { a: [ "red", "blue" ] }.
Ejemplo
Considere la siguiente colección:
{ "_id": "apples", "qty": 5 } { "_id": "bananas", "qty": 7 } { "_id": "apricots", "qty": 3 } { "_id": "oranges", "qty": { "in stock": 8, "ordered": 12 } } { "_id": "avocados", "qty": "fourteen" }
La siguiente consulta utiliza $gt para devolver documentos donde el valor de qty es mayor que 4:
db.inventory.find( { qty: { $gt: 4 } } )
[ { _id: 'apples', qty: 5 }, { _id: 'bananas', qty: 7 } ]
El documento con _id igual a "apricots" no se devuelve porque su valor qty, 3, no es mayor que 4.
El documento con _id igual a "avocados" no se devuelve porque su valor qty es de tipo string mientras que el operando $gt es de tipo integer.
El documento con _id igual a "oranges" no se devuelve porque su valor qty es de tipo object.
Tip
Para garantizar que se cumplan los tipos de datos en una colección, utilice la validación de esquema.