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.
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é ó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 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 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: