Docs Menu
Docs Home
/ /

Constructores de filtros

En esta guía, puede aprender a utilizar constructores para especificar filtros para sus consultas en el controlador Java de MongoDB.

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

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 de coincidencia de 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 piscina cubierta y estacionamiento gratuito.

  • Una reseña 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 Filters clase proporciona métodos de fábrica estáticos para todos los operadores de consulta de MongoDB. Cada método devuelve una instancia del tipo BSON, que se puede pasar a cualquier método que espere un filtro de consulta.

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 de 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 del operador de comparación incluyen:

Método de comparación
Cerillas

valores iguales a un valor especificado.

valores mayores que 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 no iguales a un valor especificado.

cualquiera de los valores especificados en una matriz.

Ninguno de los valores especificados en una matriz.

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()));

A continuación se 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()));

A continuación se 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
Cerillas

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

Documentos con las condiciones de cualquiera de los filtros. Este operador une filtros con un OR lógico.

documentos que no coinciden con el filtro.

Documentos que no coinciden con ambos filtros. Este operador une los filtros con 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()));

A continuación se 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 matriz evalúan el campo de matriz en un documento.

Los métodos del operador de matriz incluyen:

Método de arreglo
Cerillas

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

documenta si un elemento en el campo de la matriz coincide con todas las condiciones especificadas.

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

El siguiente ejemplo coincide con documentos con una matriz 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()));

A continuación se 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
Cerillas

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" o "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()));

A continuación se 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
Cerillas

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

documentos donde los valores contienen una expresión regular especificada.

documentos que contienen una expresión de búsqueda de texto completo especificada.

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

El siguiente ejemplo coincide con documentos que tienen un campo color que comienza 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()));

A continuación se 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 bit a bit convierten un número en su valor binario para evaluar sus bits.

Los métodos de operador bit a bit incluyen:

Método bit a bit
Cerillas

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

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

documentos en los que se establece al menos uno de los bits especificados de un campo (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 coincide con documentos que tienen un campo bitField con bits establecidos 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()));

A continuación se 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 específica y su relación con una forma o ubicación.

Los métodos del operador geoespacial incluyen:

Método geoespacial
Cerillas

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 del cuadro especificado.

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 pares de coordenadas heredados) que existen dentro del círculo especificado, utilizando geometría esférica.

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

Objetos geoespaciales cercanos a un punto. Requiere un índice geoespacial. Los índices 2dsphere y 2d admiten $near.

Objetos geoespaciales cercanos a un punto de 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 point campo contiene una geometría GeoJSON que se encuentra dentro del polígono dado en la geo_points colección:

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()));

A continuación se 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