Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Filtros desarrolladores

En esta guía, puedes aprender cómo usar constructores para especificar filtros en tus consultas con el controlador MongoDB Java.

Los constructores son clases proporcionadas por el controlador Java de MongoDB que lo ayudan a construir BSON objects. Para obtener más información, consulte nuestra guía sobre desarrolladores.

Los filtros son las operaciones que MongoDB utiliza para limitar los resultados a lo que desea ver.

Algunos lugares donde usamos filtros son:

  • find()

  • etapa match de la agregación

  • deleteOne()/deleteMany()

  • updateOne()/updateMany()

Algunos ejemplos de resultados de consultas con filtros son:

  • Artículos que cuestan entre $0 y $25

  • Un hotel con comodidades que incluyen una piscina cubierta y estacionamiento gratuito

  • Una revisión de un crítico gastronómico que menciona "picante"

Esta guía le muestra cómo utilizar constructores con ejemplos de los siguientes tipos de operadores:

  • Comparación

  • Lógica

  • Arreglos

  • Elementos

  • Evaluación

  • Bitwise

  • Geoespacial

La clase Filters proporciona métodos de fábrica estáticos para todos los operadores del query de MongoDB. Cada método devuelve una instancia del tipo BSON, el cual puedes pasar a cualquier método que espere un filtro de query.

Tip

Para abreviar, puede elegir importar todos los métodos de los filtros. clase estáticamente:

import static com.mongodb.client.model.Filters.*;

Los siguientes ejemplos asumen esta importación estática.

Los ejemplos de filtros en esta guía utilizan las siguientes colecciones de muestra:

Recopilación: paint_purchases

{ "_id": 1, "color": "red", "qty": 5, "vendor": ["A"] }
{ "_id": 2, "color": "purple", "qty": 10, "vendor": ["C", "D"] }
{ "_id": 3, "color": "blue", "qty": 8, "vendor": ["B", "A"] }
{ "_id": 4, "color": "white", "qty": 6, "vendor": ["D"] }
{ "_id": 5, "color": "yellow", "qty": 11, "vendor": ["A", "B"] }
{ "_id": 6, "color": "pink", "qty": 5, "vendor": ["C"] }
{ "_id": 7, "color": "green", "qty": 8,"vendor": ["B", "C"] }
{ "_id": 8, "color": "orange", "qty": 7, "vendor": ["A", "D"] }

Recopilación: binary_numbers

{ "_id": 9, "a": 54, "binaryValue": "00110110" }
{ "_id": 10, "a": 20, "binaryValue": "00010100" }
{ "_id": 11, "a": 68, "binaryValue": "1000100" }
{ "_id": 12, "a": 102, "binaryValue": "01100110" }

Recopilación: geo_points

{ "_id": 13, "coordinates": { "type": "Point", "coordinates": [2.0, 2.0] } }
{ "_id": 14, "coordinates": { "type": "Point", "coordinates": [5.0, 6.0] } }
{ "_id": 15, "coordinates": { "type": "Point", "coordinates": [1.0, 3.0] } }
{ "_id": 16, "coordinates": { "type": "Point", "coordinates": [4.0, 7.0] } }

Los filtros de comparación incluyen todos los operadores que comparan el valor de un documento con un valor especificado.

Los métodos de operadores de comparación incluyen:

Método de comparación
Coincidencias

valores iguales a un valor especificado.

valores superiores a un valor especificado.

valores mayores o iguales a un valor especificado.

valores inferiores a un valor especificado.

valores menores o iguales a un valor específico.

valores que no son iguales a un valor especificado.

cualquiera de los valores especificados en una matriz.

ninguno de los valores especificados en un arreglo.

todos los documentos.

El siguiente ejemplo crea un filtro que coincide con todos los documentos donde el valor del campo qty es igual a "5" en la colección paint_purchases:

Bson equalComparison = eq("qty", 5);
collection.find(equalComparison).forEach(doc -> System.out.println(doc.toJson()));

Lo siguiente muestra el resultado de la consulta anterior:

{ "_id": 1, "color": "red", "qty": 5, "vendor": ["A"] }
{ "_id": 6, "color": "pink", "qty": 5, "vendor": ["C"] }

El siguiente ejemplo crea un filtro que coincide con todos los documentos donde el valor del campo qty es mayor o igual a "10" en la colección paint_purchases:

Bson gteComparison = gte("qty", 10);
collection.find(gteComparison).forEach(doc -> System.out.println(doc.toJson()));

Lo siguiente muestra el resultado de la consulta anterior:

{ "_id": 2, "color": "purple", "qty": 10, "vendor": ["C", "D"] }
{ "_id": 5, "color": "yellow", "qty": 11, "vendor": ["A", "B"] }

El siguiente ejemplo crea un filtro que empareja todos los documentos en la colección paint_purchases porque el predicado está vacío:

Bson emptyComparison = empty();
collection.find(emptyComparison).forEach(doc -> System.out.println(doc.toJson()));

La salida de la query previa consiste en todos los documentos de la colección.

{ "_id": 1, "color": "red", "qty": 5, "vendor": ["A"] }
{ "_id": 2, "color": "purple", "qty": 10, "vendor": ["C", "D"] }
{ "_id": 3, "color": "blue", "qty": 8, "vendor": ["B", "A"] }
...

Los operadores lógicos realizan operaciones lógicas basadas en las condiciones del método especificado.

Los métodos del operador lógico incluyen:

Método lógico
Coincidencias

documentos con las condiciones de todos los filtros. Este operador une los filtros usando un AND lógico.

documentos con las condiciones de cualquiera de los filtros. Este operador combina filtros con un OR lógico.

documentos que no coinciden con el filtro.

documentos que no coincidan con ambos filtros. Este operador une los filtros usando un NOR lógico.

El siguiente ejemplo crea un filtro que coincide con los documentos donde el valor del campo qty es mayor que "8" o el valor del campo color es igual a "rosa" en la colección paint_purchases:

Bson orComparison = or(gt("qty", 8), eq("color", "pink"));
collection.find(orComparison).forEach(doc -> System.out.println(doc.toJson()));

Lo siguiente muestra el resultado de la consulta anterior:

{ "_id": 2, "color": "purple", "qty": 10, "vendor": ["C", "D"] }
{ "_id": 5, "color": "yellow", "qty": 11, "vendor": ["A", "B"] }
{ "_id": 6, "color": "pink", "qty": 5, "vendor": ["C"] }

Los operadores de arreglos evalúan el campo del arreglo en un documento.

Los métodos de operador de arreglo incluyen:

Método de arreglo
Coincidencias

documentos si el campo de matriz contiene todos los elementos especificados en la consulta.

documentos si un elemento en el campo de arreglo cumple con todas las condiciones especificadas.

documentos si el campo del arreglo contiene un número específico de elementos.

El siguiente ejemplo empareja documentos con un arreglo vendors que contiene tanto "A" como "D" en la colección paint_purchases:

List<String> search = Arrays.asList("A", "D");
Bson allComparison = all("vendor", search);
collection.find(allComparison).forEach(doc -> System.out.println(doc.toJson()));

Lo siguiente muestra el resultado de la consulta anterior:

{ "_id": 8, "color": "orange", "qty": 7, "vendor": ["A", "D"] }

Los operadores de elementos evalúan la naturaleza de un campo especificado.

Los métodos del operador de elementos incluyen:

Método de elementos
Coincidencias

documentos que tienen el campo especificado.

documentos si un campo es del tipo especificado.

El siguiente ejemplo coincide con documentos que tienen un campo qty y su valor no es igual a "5" u "8" en la colección paint_purchases:

Bson existsComparison = and(exists("qty"), nin("qty", 5, 8));
collection.find(existsComparison).forEach(doc -> System.out.println(doc.toJson()));

Lo siguiente muestra el resultado de la consulta anterior:

{ "_id": 2, "color": "purple", "qty": 10, "vendor": ["C", "D"] }
{ "_id": 4, "color": "white", "qty": 6, "vendor": ["D"]}
{ "_id": 5, "color": "yellow", "qty": 11, "vendor": ["A", "B"] }
{ "_id": 8, "color": "orange", "qty": 7, "vendor": ["A", "D"] }

Los operadores de evaluación evalúan el valor de cualquier campo en un documento.

Los métodos del operador de evaluación incluyen:

Método de Evaluación
Coincidencias

documentos donde una operación módulo sobre un valor de campo produce un resultado específico.

documentos cuyos valores contienen una expresión regular especificada.

documentos que contienen una expresión específica de búsqueda de texto completo.

documentos que contienen una expresión específica de JavaScript.

El siguiente ejemplo coincide con documentos que tienen un campo color que empieza con la letra "p" en la colección paint_purchases:

Bson regexComparison = regex("color", "^p");
collection.find(regexComparison).forEach(doc -> System.out.println(doc.toJson()));

Lo siguiente muestra el resultado de la consulta anterior:

{ "_id": 2, "color": "purple", "qty": 10, "vendor": ["C", "D"] }
{ "_id": 6, "color": "pink", "qty": 5, "vendor": ["C"] }

Los operadores a nivel de bits convierten un número en su valor binario para evaluar sus bits.

Los métodos del operador bit a bit incluyen:

Método bit a bit
Coincidencias

documentos donde se establecen los bits especificados de un campo (es decir, "1").

documentos donde los bits especificados de un campo están libres (es decir, "0").

documentos donde al menos uno de los bits especificados de un campo están activados (es decir, 1).

documentos en los que al menos uno de los bits especificados de un campo está claro (es decir, "0").

El siguiente ejemplo encuentra documentos que tienen un campo bitField con bits activados en posiciones de la máscara de bits correspondiente "34" (es decir, "00100010") en la colección binary_numbers:

Bson bitsComparison = bitsAllSet("a", 34);
collection.find(bitsComparison).forEach(doc -> System.out.println(doc.toJson()));

Lo siguiente muestra el resultado de la consulta anterior:

{ "_id": 9, "a": 54, "binaryValue": "00110110" }
{ "_id": 12, "a": 102, "binaryValue": "01100110" }

Los operadores geoespaciales evalúan una coordenada especificada y su relación con una forma o ubicación.

Los métodos de operador geoespacial incluyen:

Método geoespacial
Coincidencias

documentos que contienen un valor de geometría GeoJSON que se encuentra dentro de una geometría GeoJSON delimitadora.

documentos que contienen un valor de coordenadas que existe dentro de la caja especificada.

documentos que contienen un valor de coordenadas que existe dentro del polígono especificado.

documentos que contienen un valor de coordenadas que existe dentro del círculo especificado.

geometrías que contienen un valor de datos geoespaciales (GeoJSON o legacy coordinate pairs) que existen dentro del círculo especificado, utilizando geometría esférica.

geometrías que intersectan con una geometría GeoJSON. El índice 2dsphere admite $geoIntersects.

objetos geoespaciales en proximidad a un punto. Se requiere un índice geoespacial. Los índices de 2dsphere y 2d admiten $near.

objetos geoespaciales en cercanía a un punto sobre una esfera. Requiere un índice geoespacial. Los índices 2dsphere y 2d admiten $nearSphere.

El siguiente ejemplo crea un filtro que coincide con los documentos en los que el campo point contiene una geometría GeoJSON que se encuentra dentro del Polígono dado en la colección geo_points:

Polygon square = new Polygon(Arrays.asList(new Position(0, 0),
new Position(4, 0),
new Position(4, 4),
new Position(0, 4),
new Position(0, 0)));
// Prints documents that contain "coordinates" values that are within the bounds of the polygon passed as the filter parameter
Bson geoWithinComparison = geoWithin("coordinates", square);
collection.find(geoWithinComparison).forEach(doc -> System.out.println(doc.toJson()));

Lo siguiente muestra el resultado de la consulta anterior:

{ "_id": 13, "coordinates": {"type": "Point", "coordinates": [2.0, 2.0]} }
{ "_id": 15, "coordinates": {"type": "Point", "coordinates": [1.0, 3.0]} }

Volver

Agregación

En esta página