Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Buscar documentos

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

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 }

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.

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.

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 un runtime valor menor a 15 minutos, al aplicar una proyección y ordenamiento a los resultados

  • Llama a los métodos find() y first() para recuperar el documento con el mayor imdb.rating que tenga un valor runtime inferior 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}}

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.

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_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 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.

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:

Volver

Especifica un query

En esta página