Overview
En esta guía, aprenderá a recuperar datos de sus colecciones de MongoDB mediante operaciones de lectura. Estas operaciones son comandos que recuperan documentos del servidor.
Hay dos tipos de operaciones de lectura:
Operaciones de búsqueda que le permiten recuperar documentos de sus colecciones
Operaciones de agregación, que le permiten transformar los datos de sus colecciones
Esta guía incluye las siguientes secciones:
Datos de muestra para ejemplos presenta los datos de muestra que se utilizan en los ejemplos de operaciones de lectura
Operaciones de búsqueda describe cómo utilizar el controlador para ejecutar operaciones de búsqueda
Operaciones de agregación describe cómo utilizar el controlador para ejecutar operaciones de agregación
Información adicional proporciona enlaces a recursos y documentación de API para los tipos y métodos mencionados en esta guía.
Datos de muestra para ejemplos
Los ejemplos de esta guía utilizan los siguientes documentos de muestra. Cada documento representa un artículo del 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
Utilice operaciones de búsqueda para recuperar datos de MongoDB. Las operaciones de búsqueda consisten en: find() y find_one() métodos.
Encuentra todos los documentos coincidentes
Para encontrar todos los documentos que coinciden con sus criterios, utilice el find() método. Este método utiliza un filtro de consulta como parámetro. Un filtro de consulta consta de los campos y valores que conforman los criterios de coincidencia de los documentos.
El método devuelve un tipo Cursor que puede iterar para recuperar cualquier documento que coincida con los criterios de filtro.
Para ver un ejemplo que utiliza este método para recuperar datos, consulte el ejemplo find().
Para obtener más información sobre cómo especificar una consulta, consulte la Especifique una guía de consulta.
Encuentre un documento
Para encontrar el primer documento que coincida con sus criterios, utilice el find_one() método. Este método utiliza un filtro de consulta como parámetro. Un filtro de consulta consta de los campos y valores que conforman los criterios de coincidencia de los documentos.
Si un documento cumple los criterios de filtro, el método devuelve un tipo Result<Option<T>> con un valor de Some. Si ningún documento cumple los criterios de 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, consulte el ejemplo find_one().
Modificar el comportamiento de búsqueda
Puede modificar el comportamiento de find() pasando una instancia FindOptions como parámetro, y puede modificar el comportamiento de find_one() pasando una instancia FindOneOptions.
Para utilizar valores predeterminados para cada configuración, especifique el valor None como parámetro de opciones.
La siguiente tabla describe las configuraciones comúnmente utilizadas que puede especificar en FindOptions y FindOneOptions:
Configuración | Descripción |
|---|---|
| The collation to use when sorting results. To learn more about collations,
see the Collations guide. Type: CollationDefault: None |
| The index to use for the operation. To learn more about
indexes, see Indexes in the Server
manual. Type: HintDefault: None |
| The projection to use when returning results. Type: DocumentDefault: None |
| The read concern to use for the find operation. If you don't
set this option, the operation inherits the read concern set for the
collection. To learn more about read concerns, see
Read Concern
in the Server manual. Type: ReadConcern |
| The number of documents to skip when returning results. To learn more
about how to use the skip() builder method, see Skip Returned Results.Type: u64Default: None |
| The sort to use when returning results. By default, the driver
returns documents in their natural order, or as they appear in
the database. To learn more, see natural order
in the Server manual glossary. To learn more about how to use the
sort() builder method, see Sort Results.Type: DocumentDefault: None |
Nota
Opciones de instanciación
El controlador de Rust implementa el patrón de diseño Builder para la creación de diversos tipos, como FindOneOptions o FindOptions. Puedes usar el método builder() de cada tipo para construir una instancia de opciones encadenando las funciones del constructor de opciones una a una.
Para obtener una lista completa de las configuraciones que puede especificar para cada tipo, consulte la documentación de la API para FindOptionsy 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 de find_one()
Este ejemplo muestra cómo llamar al método find_one() con los siguientes parámetros:
Un filtro de consulta que coincide con los documentos donde el valor de
unit_pricees menor o igual a20.00Una instancia
FindOneOptionsque omite los dos primeros documentos coincidentes
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
Utilice operaciones de agregación para recuperar y transformar datos de sus colecciones. Puede realizar operaciones de agregación con el método aggregate().
Datos agregados del documento
El aggregate() método utiliza una canalización de agregación como parámetro. Una canalización de agregación incluye una o más etapas que especifican cómo transformar los datos. Cada etapa incluye un operador de agregación (con el $ prefijo) y los parámetros necesarios para dicho operador.
Para obtener más información sobre las agregaciones y ver ejemplos de agregaciones, consulte la guía de agregación.
El método devuelve los documentos resultantes en un Cursor tipo. Si su canal de agregación no contiene una etapa `$match`, el canal procesará todos los documentos de la colección.
Modificar el comportamiento de agregación
Puede modificar el comportamiento de aggregate() pasando una instancia AggregateOptions como parámetro opcional.
Para utilizar valores predeterminados para cada configuración, especifique el valor None como parámetro de opciones.
La siguiente tabla describe las configuraciones comúnmente utilizadas que puede especificar en AggregateOptions:
Configuración | Descripción |
|---|---|
| Enables writing to temporary files. If true,
aggregation stages can write data to the _tmp subdirectory in the
dbPath directory.Type: boolDefault: false |
| Specifies the maximum number of documents the server returns per
cursor batch. This option sets the number of documents the cursor
keeps in memory rather than the number of documents the cursor
returns. Type: u32Default: 101 documents initially, 16 MB maximum for
subsequent batches |
| The collation to use when sorting results. To learn more about collations,
see the Collations guide. Type: CollationDefault: None |
| The index to use for the operation. To learn more about
indexes, see Indexes in the Server
manual. Type: HintDefault: None |
| The read concern to use for the find operation. If you don't
set this option, the operation inherits the read concern set for the
collection. To learn more about read concerns, see
Read Concern
in the Server manual. Type: ReadConcern |
| The write concern for the operation. If you don't set this
option, the operation inherits the write concern set for
the collection. To learn more about write concerns, see
Write Concern in the
Server manual. Type: WriteConcern |
Para obtener una lista completa de configuraciones, consulte la documentación de la API de AggregateOptions.
Ejemplo
Este ejemplo muestra cómo llamar al método aggregate() con una canalización que contiene las siguientes etapas:
Una etapa
$grouppara agrupar documentos por el campocategoryy calcular el promedio del campounit_priceporcategoryUna etapa
$sortaavg_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 de esta guía, consulte la siguiente documentación:
Especificar una guía de consulta
Guía deagregación
Guía deordenamiento de resultados
Guía paraomitir resultados devueltos
Documentación de la API
Para obtener más información sobre los métodos y tipos mencionados en esta guía, consulte la siguiente documentación de API: