Overview
En esta guía, puedes aprender cómo recuperar documentos de tu base de datos MongoDB. Puedes encontrar tus documentos utilizando lo siguiente:
Recupera un subconjunto de documentos de la colección usando un operación de búsqueda
Realiza transformaciones en los documentos recuperados de tu colección usando una operación de agregación
Supervise cambios en tiempo real en su base de datos mediante Flujos de cambios
Datos de muestra para ejemplos
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 lleva un registro del color y la cantidad, lo que corresponde a la color y qty campos en su paint_order colección:
{ "_id": 1, "color": "purple", "qty": 10 } { "_id": 2, "color": "green", "qty": 8 } { "_id": 3, "color": "purple", "qty": 4 } { "_id": 4, "color": "green", "qty": 11 }
Encontrar operación
Utiliza la operación find para recuperar tus documentos de MongoDB. Se puede especificar qué documentos recuperar, en qué orden recuperarlos 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.
A continuación, puedes utilizar métodos como forEach() o cursor() para recuperar documentos coincidentes. Para más información, consulta el FindIterable
Documentación de la API.
Para recuperar un solo documento, puedes añadir el método first() a tu llamada find(). Para elegir un documento específico, puedes usar la operación sort() antes de seleccionar el primer documento. También puedes usar el método limit() para optimizar el uso de memoria. Para más información, consulta el manual del servidor para obtener más información sobre la optimización de la memoria al usar la operación de ordenación.
Ejemplo
El propietario desea saber qué órdenes contienen más de tres, pero menos de nueve latas de pintura de su colección de pedidos de pintura.
Para abordar este escenario, el propietario encuentra órdenes que cumplen 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 más información sobre cómo crear filtros, consulta nuestra Guía de desarrolladores de filtros.
Lo siguiente 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 cumplen con los criterios.
Buscar ejemplo: archivo completo
Nota
Configuración de ejemplo
Este ejemplo se conecta a una instancia de MongoDB mediante un 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 colección movies en la base de datos sample_mflix incluida en los conjuntos de datos de muestra de Atlas. Puede cargarlos en su base de datos en el nivel gratuito de MongoDB Atlas siguiendo el MongoDB Comenzar.
Este ejemplo es un archivo completo y autónomo que realiza las siguientes acciones:
Llama al método
find()para recuperar 10 documentos que tienen unruntimevalor menor a15minutos, al aplicar una proyección y ordenamiento a los resultadosLlama a los métodos
find()yfirst()para recuperar el documento con el mayorimdb.ratingque tenga un valorruntimeinferior a15minutos, 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}}
Operación de agregación
Usa la operación de agregados para ejecutar las etapas en un pipeline de agregación. Un pipeline de agregación es una transformación de múltiples etapas que produce un resultado agregado.
Para realizar una operación de agregación se debe llamar el método aggregate() en una instancia de MongoCollection. Este método acepta expresiones de agregación para ejecutarse en secuencia. Para realizar agregaciones, puedes 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 de Operaciones de expresión de agregación.
Ejemplo
El propietario desea saber cuál es el color de pintura más comprado (la mayor cantidad vendida) de su colección de paint_order.
Para abordar la situación, el propietario crea una pipeline de agregación que:
Coincide con todos los documentos de la colección
paint_orderAgrupa las órdenes por colores
Suma el campo de cantidad por color
Ordena los resultados por la mayor a la menor cantidad
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 ejecute la agregación, descubren que el "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.
Información Adicional
Documentación de la API
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 la API: