Overview
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
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 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 }
Encontrar operación
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.
Ejemplo
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.
Ejemplo de búsqueda: Archivo completo
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 valorruntimemenor a15minutos, aplicando una proyección y ordenación a los resultadosLlama a los métodos
find()yfirst()para recuperar el documento con elimdb.ratingmás alto que tenga un valorruntimemenor 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 Agregada
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".
Ejemplo
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_orderAgrupa 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.
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 API: