Overview
En esta guía, puedes aprender cómo recuperar datos de tus colecciones MongoDB usando operaciones de lectura. Las operaciones de lectura son comandos que recuperan documentos del servidor.
Hay dos tipos de operaciones de lectura:
Operaciones de búsqueda, que permiten recuperar documentos de tus colecciones.
Operaciones de agregación, que te permiten transformar los datos en tus colecciones
Esta guía incluye las siguientes secciones:
Datos de muestra para ejemplos presenta los datos de muestra que son utilizados por los ejemplos de la operación de lectura
Encontrar operaciones describe cómo usar el controlador para ejecutar operaciones de búsqueda
Operaciones de agregación describe cómo usar el driver para ejecutar operaciones de agregación
Información adicional proporciona enlaces a recursos y documentación de la API para los tipos y métodos mencionados en esta guía
Datos de muestra para ejemplos
Los ejemplos en esta guía utilizan los siguientes documentos de muestra. Cada documento representa un artículo en el inventario de una tienda y contiene información sobre su categorización y precio unitario:
let docs = vec! [ Inventory { item: "candle".to_string(), category: "decor".to_string(), unit_price: 2.89, }, Inventory { item: "blender".to_string(), category: "kitchen".to_string(), unit_price: 38.49, }, Inventory { item: "placemat".to_string(), category: "kitchen".to_string(), unit_price: 3.19, }, Inventory { item: "watering can".to_string(), category: "garden".to_string(), unit_price: 11.99, } ];
Operaciones de búsqueda
Utiliza operaciones de búsqueda para recuperar datos de MongoDB. Las operaciones de Find consisten en los métodos find() y find_one().
Encontrar todos los documentos coincidentes
Para encontrar todos los documentos que coincidan con tus criterios, utiliza el método find(). Este método toma un filtro de query como parámetro. Un filtro de query consta de los campos y valores que forman los criterios para que los documentos coincidan.
El método retorna un tipo Cursor a través del cual puedes iterar para recuperar cualquier documento que coincida con los criterios de filtro.
Para ver un ejemplo que utiliza este método para recuperar datos, consulta el ejemplo de find().
Para obtener más información sobre cómo especificar una query, consulta la guía Especificar una query.
Encuentre un documento
Para encontrar el primer documento que cumpla con tus criterios, usa el método find_one(). Este método toma un filtro de query como parámetro. Un filtro de query consta de los campos y valores que forman los criterios para que los documentos coincidan.
Si un documento coincide con los criterios del filtro, el método devuelve un tipo Result<Option<T>> con un valor de Some. Si ningún documento cumple con los criterios del filtro, find_one() devuelve un tipo Result<Option<T>> con un valor de None.
Para ver un ejemplo que utiliza este método para recuperar datos, consulta el ejemplo de find_one().
Modificar el comportamiento de búsqueda
Puedes modificar el comportamiento de find() pasando una instancia de FindOptions como parámetro, y puedes modificar el comportamiento de find_one() pasando una instancia de FindOneOptions.
Para usar valores por defecto para cada configuración, especifica el valor None como parámetro de opciones.
La siguiente tabla describe la configuración utilizada comúnmente que puedes especificar en FindOptions y FindOneOptions:
Configuración | Descripción |
|---|---|
| La intercalación que se utilizará al ordenar los resultados. Para obtener más información sobre las intercalaciones, consulte la guía Intercalación. |
| El índice que se utilizará para la operación. Para obtener más información sobre los índices, consulte Índice en el manual del servidor. |
| La proyección que se utilizará al devolver los resultados. |
| El nivel de consistencia de lectura que se utilizará para la operación de búsqueda. Si no establece esta opción, la operación hereda el nivel de consistencia de lectura establecido para la colección. Para obtener más información sobre el nivel de consistencia de lectura, consulte Nivel de consistencia de lectura en el manual del servidor. |
| La cantidad de documentos que se deben omitir al devolver los resultados. Para aprender más sobre cómo utilizar el método de desarrolladores |
| La clasificación que se utilizará al devolver los resultados. Por defecto, el driver devuelve los documentos en su orden natural, o tal como aparecen en la base de datos. Para aprender más, consulte orden natural en el glosario del manual del servidor. Para aprender más sobre cómo utilizar el método de desarrolladores |
Nota
Opciones de instanciación
El driver de Rust implementa el patrón de diseño Builder para la creación de muchos tipos diferentes, como FindOneOptions o FindOptions. Puedes utilizar el método builder() de cada tipo para construir una instancia de opciones encadenando funciones construtoras de opciones una a la vez.
Para una lista completa de ajustes que puede especificar para cada tipo, consulte la documentación de la API para FindOptions y FindOneOptions.
Ejemplos
Las siguientes secciones contienen ejemplos que utilizan los métodos find() y findOne() para recuperar documentos de muestra que coinciden con los criterios de filtro.
Ejemplo de find()
Este ejemplo muestra cómo llamar al método find() con los siguientes parámetros:
Un filtro de query que coincide con documentos donde el valor de
unit_pricees menor que12.00y el valor decategoryno es"kitchen"Una instancia
FindOptionsque ordena los documentos coincidentes porunit_priceen orden descendente
let opts = FindOptions::builder() .sort(doc! { "unit_price": -1 }) .build(); let mut cursor = my_coll.find( doc! { "$and": vec! [ doc! { "unit_price": doc! { "$lt": 12.00 } }, doc! { "category": doc! { "$ne": "kitchen" } } ] }, opts ).await?; while let Some(result) = cursor.try_next().await? { println!("{:?}", result); };
Inventory { item: "watering can", category: "garden", unit_price: 11.99 } Inventory { item: "candle", category: "decor", unit_price: 2.89 }
Ejemplo find_one()
Este ejemplo muestra cómo llamar al método find_one() con los siguientes parámetros:
Un filtro de query que empareja documentos donde el valor de
unit_pricees menor o igual a20.00Una instancia de
FindOneOptionsque omite los dos primeros documentos encontrados
let opts = FindOneOptions::builder().skip(2).build(); let result = my_coll.find_one( doc! { "unit_price": doc! { "$lte": 20.00 } }, opts ).await?; println!("{:#?}", result);
Some( Inventory { item: "watering can", category: "garden", unit_price: 11.99, }, )
Operaciones de agregación
Utiliza operaciones de agregación para recuperar y transformar datos de tus colecciones. Puede realizar operaciones de agregación utilizando el método aggregate().
Agrupar datos de documentos
El método aggregate() toma una pipeline de agregación como parámetro. Una pipeline de agregación incluye una o más etapas que especifican cómo transformar los datos. Una etapa incluye un operador de agregación (precedido por un $) y cualquier parámetro requerido para ese operador.
Para obtener más información sobre las agregaciones y ver ejemplos de agregación, consulte la guía de Agregación.
El método devuelve los documentos resultantes en un tipo Cursor. Si tu pipeline de agregación no contiene una etapa $match, el pipeline procesa todos los documentos de la colección.
Modificar el comportamiento de agregación
Puede modificar el comportamiento de aggregate() pasando una instancia de AggregateOptions como parámetro opcional.
Para usar valores por defecto para cada configuración, especifica el valor None como parámetro de opciones.
La siguiente tabla describe las configuraciones de uso común que puede especificar en AggregateOptions:
Configuración | Descripción |
|---|---|
| Permite guardar en archivos temporales. Si |
| Especifica el número máximo de documentos que el servidor devuelve por agrupar de cursor. Esta opción establece el número de documentos que el cursor mantiene en la memoria en lugar del número de documentos que el cursor devuelve. |
| La intercalación que se utilizará al ordenar los resultados. Para obtener más información sobre las intercalaciones, consulte la guía Intercalación. |
| El índice que se utilizará para la operación. Para obtener más información sobre los índices, consulte Índice en el manual del servidor. |
| El nivel de consistencia de lectura que se utilizará para la operación de búsqueda. Si no establece esta opción, la operación hereda el nivel de consistencia de lectura establecido para la colección. Para obtener más información sobre el nivel de consistencia de lectura, consulte Nivel de consistencia de lectura en el manual del servidor. |
| El nivel de confirmación de escritura (write concern) para la operación. Si no establece esta opción, la operación hereda el nivel de confirmación de escritura (write concern) establecido para la colección. Para obtener más información sobre el nivel de confirmación de escritura (write concern), consulta Nivel de confirmación de escritura (write concern) en el manual del servidor. |
Para obtener una lista completa de configuraciones, consulta la documentación de la API para AggregateOptions.
Ejemplo
Este ejemplo muestra cómo llamar al método aggregate() con un pipeline que contiene las siguientes etapas:
Una etapa de
$grouppara agrupar documentos por el campocategoryy calcular el promedio del campounit_priceporcategoryUna etapa de
$sortpara poravg_priceen orden ascendente
let pipeline = vec![ doc! { "$group": doc! { "_id" : doc! {"category": "$category"} , "avg_price" : doc! { "$avg" : "$unit_price" } } }, doc! { "$sort": { "_id.avg_price" : 1 } } ]; let mut cursor = my_coll.aggregate(pipeline, None).await?; while let Some(result) = cursor.try_next().await? { println!("{:?}", result); };
Document({"_id": Document({"category": String("decor")}), "avg_price": Double(2.890000104904175)}) Document({"_id": Document({"category": String("kitchen")}), "avg_price": Double(20.840000867843628)}) Document({"_id": Document({"category": String("garden")}), "avg_price": Double(11.989999771118164)})
Información Adicional
Para ejemplos ejecutables de las operaciones de búsqueda, consulta los siguientes ejemplos de uso:
Para obtener más información sobre las operaciones en esta guía, consulte la siguiente documentación:
agregación guide
Ordenar resultados guía
Documentación de la API
Para obtener más información sobre los métodos y tipos mencionados en esta guía, vea la siguiente documentación de la API: