Docs Menu
Docs Home
/ /

Buscar documentos

En esta guía, aprenderá a recuperar documentos de su base de datos MongoDB. Puede encontrar sus documentos mediante lo siguiente:

  • Recupere un subconjunto de documentos de su colección utilizando un operación de búsqueda

  • Realice transformaciones en los documentos recuperados de su colección mediante una operación de agregación

  • Monitoree los cambios en tiempo real en su base de datos usando Flujos de cambios

Las siguientes secciones presentan ejemplos de cómo el propietario de una tienda de pinturas gestiona los pedidos de sus clientes. Para cada pedido, el propietario registra el color y la cantidad, que corresponde a la cantidad. color y qty campos en su colección paint_order:

{ "_id": 1, "color": "purple", "qty": 10 }
{ "_id": 2, "color": "green", "qty": 8 }
{ "_id": 3, "color": "purple", "qty": 4 }
{ "_id": 4, "color": "green", "qty": 11 }

Utilice la operación de búsqueda para recuperar sus documentos de MongoDB. Puede especificar qué documentos recuperar, en qué orden y cuántos recuperar.

Llama al método find() en una instancia de un MongoCollection para filtrar documentos que coincidan con la query proporcionada. Para más información sobre cómo especificar una query, consulta nuestra guía Especificar una query.

Luego, puede usar métodos como forEach() o cursor() para recuperar los documentos coincidentes. Para obtener más información, consulte FindIterable. Documentación de la API.

Para recuperar un solo documento, puede agregar el first() método a su find() llamada. Para seleccionar un documento específico, puede usar la sort() operación antes de seleccionar el primer documento. También puede usar el limit() método para optimizar el uso de memoria. Para obtener más información, consulte el manual del servidor para obtener más información sobre la optimización de memoria al usar la operación de ordenación.

El propietario desea saber qué pedidos contienen más de tres, pero menos de nueve latas de pintura de su colección paint_order.

Para abordar este escenario, el propietario busca pedidos que coincidan con los criterios:

Bson filter = Filters.and(Filters.gt("qty", 3), Filters.lt("qty", 9));
// Retrieves documents that match the filter and prints them as JSON
collection.find(filter).forEach(doc -> System.out.println(doc.toJson()));

Para obtener más información sobre cómo crear filtros, consulte nuestra guía de creadores de filtros.

A continuación se muestra el resultado de la consulta anterior:

{ "_id": 2, "color": "green", "qty": 8 }
{ "_id": 3, "color": "purple", "qty": 4 }

Después de que el propietario ejecuta esta consulta, encuentra dos pedidos que coinciden con los criterios.

Nota

Configuración de ejemplo

Este ejemplo se conecta a una instancia de MongoDB mediante una URI de conexión. Para obtener más información sobre cómo conectarse a su instancia de MongoDB, consulte la guía "Crear un MongoClient". Este ejemplo también utiliza la movies colección de la sample_mflix base de datos incluida en los conjuntos de datos de ejemplo de Atlas. Puede cargarlos en su base de datos en la versión gratuita de MongoDB Atlas siguiendo la guía "Empezar a usar MongoDB".

Este ejemplo es un archivo completo e independiente que realiza las siguientes acciones:

  • Llama al método find() para recuperar 10 documentos que tienen un valor runtime menor a 15 minutos, aplicando una proyección y ordenación a los resultados

  • Llama a los métodos find() y first() para recuperar el documento con el imdb.rating más alto que tenga un valor runtime menor a 15 minutos, aplicando una proyección al resultado

// Retrieves documents that match a query filter by using the Java driver
package org.example;
import static com.mongodb.client.model.Filters.lt;
import org.bson.Document;
import org.bson.conversions.Bson;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Projections;
import com.mongodb.client.model.Sorts;
import static com.mongodb.client.model.Filters.eq;
public class Find {
public static void main( String[] args ) {
// Replace the uri string with your MongoDB deployment's connection string
String uri = "<connection string uri>";
try (MongoClient mongoClient = MongoClients.create(uri)) {
MongoDatabase database = mongoClient.getDatabase("sample_mflix");
MongoCollection<Document> collection = database.getCollection("movies");
// Projects "title" and "imdb" fields, excludes "_id"
Bson projectionFields = Projections.fields(
Projections.include("title", "imdb"),
Projections.excludeId());
// Retrieves documents with a runtime of less than 15 minutes, applying the
// projection and a sorting in alphabetical order
FindIterable<Document> docs = collection.find(lt("runtime", 15))
.projection(projectionFields)
.sort(Sorts.ascending("title"))
.limit(10);
// Prints the titles of the queried documents
System.out.println("10 movies under 15 minutes: ");
docs.forEach(doc -> System.out.println("- " + doc.get("title")));
System.out.println();
// Retrieves the document with the best imdb rating that is less
// than 15 minutes long, applying the projection
Document doc = collection.find(lt("runtime", 15))
.projection(projectionFields)
.sort(Sorts.ascending("imdb.rating"))
.first();
// Prints title of the queried document
if (doc == null) {
System.out.println("No results found.");
} else {
System.out.println("The highest rated movie under 15 minutes: " + doc.toJson().get("title"));
}
}
}
}
10 movies under 15 minutes: 10 Minutes, 3x3, 7:35 in the Morning, 8, 9, A Chairy Tale, A Corner in Wheat, A Gentle Spirit, A Is for Autism, A Movie,
The highest rated movie under 15 minutes: {"title": "Andrè and Wally B.", "imdb": {"rating": 5.4, "votes": 3294, "id": 86855}}

Utilice la operación de agregación para ejecutar las etapas de una canalización de agregación. Una canalización de agregación es una transformación de varias etapas que produce un resultado agregado.

Para realizar una operación de agregación, llame al aggregate() método en una instancia MongoCollection de. Este método acepta expresiones de agregación para ejecutarse en secuencia. Para realizar agregaciones, puede definir etapas de agregación que especifiquen cómo hacer coincidir documentos, renombrar campos y agrupar valores. Para obtener más información, consulte nuestra guía de agregación y la página "Operaciones de expresiones de agregación".

El propietario desea saber qué color de pintura es el más comprado (la mayor cantidad vendida) de su colección paint_order.

Para abordar el escenario, el propietario crea una canalización de agregación que:

  • Coincide con todos los documentos de la colección paint_order

  • Agrupa pedidos por colores

  • Resume el campo de cantidad por color

  • Ordena los resultados por cantidad de mayor a menor

Bson filter = Filters.empty();
// Prints the collection's "color" values and each value's frequency in descending frequency order
collection.aggregate(Arrays.asList(
Aggregates.match(filter),
Aggregates.group("$color", Accumulators.sum("qty", "$qty")),
Aggregates.sort(Sorts.descending("qty"))))
.forEach(doc -> System.out.println(doc.toJson()));

A continuación se muestra el resultado de la agregación anterior:

{ "_id": "green", "qty": 19 }
{ "_id": "purple", "qty": 14 }

Después de que el propietario ejecuta la agregación, descubre que "verde" es el color más comprado.

Para obtener más información sobre cómo crear un pipeline de agregación, consulta la página del manual del MongoDB Server sobre agregación.

Para obtener más información sobre los métodos y clases utilizados para recuperar documentos en esta página, consulte la siguiente documentación de API:

Volver

Especifica un query

En esta página