Docs Menu
Docs Home
/ /

Retrieve Data

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.

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,
},
];

Para aprender a insertar estos datos en una colección, consulte la Guía deinserción de documentos.

Utilice operaciones de búsqueda para recuperar datos de MongoDB. Las operaciones de búsqueda consisten en: find() y find_one() métodos.

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 guía Especificar una consulta.

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().

Puede modificar el comportamiento del método find() encadenando métodos del generador de opciones FindOptions a find(), y puede modificar el comportamiento del método find_one() encadenando métodos del generador de opciones FindOneOptions a find_one().

La siguiente tabla describe los campos FindOptions y FindOneOptions comúnmente utilizados que puede configurar llamando a sus métodos de generación correspondientes:

Campo
Descripción

collation

The collation to use when sorting results. To learn more about collations, see the Collations guide.

Type: Collation
Default: None

hint

The index to use for the operation. To learn more about indexes, see Indexes in the Server manual.

Type: Hint
Default: None

projection

The projection to use when returning results.

Type: Document
Default: None

read_concern

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

skip

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: u64
Default: None

sort

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: Document
Default: None

Nota

Opciones de configuración

Puede configurar los campos FindOptions y FindOneOptions encadenando los métodos del generador de opciones directamente a la llamada al método de la operación de búsqueda. Si utiliza una versión anterior del controlador, debe construir una instancia FindOptions o FindOneOptions encadenando los métodos del generador de opciones al método builder(). A continuación, pase la instancia de opciones como parámetro a find() o find_one().

Para obtener una lista completa de las configuraciones que puede especificar para cada tipo, consulte la documentación de la API para FindOptionsy FindOneOptions.

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.

Este ejemplo realiza las siguientes acciones:

  • Llama al método find()

  • Pasa un filtro de consulta a find() que coincide con los documentos donde el valor de unit_price es menor que 12.00 y el valor de category no es "kitchen"

  • Encadena el método sort() a find() para ordenar los documentos coincidentes por unit_price en orden descendente

let mut cursor = my_coll
.find(doc! { "$and": vec!
[
doc! { "unit_price": doc! { "$lt": 12.00 } },
doc! { "category": doc! { "$ne": "kitchen" } }
] })
.sort(doc! { "unit_price": -1 })
.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 }

Este ejemplo realiza las siguientes acciones:

  • Llama al método find_one()

  • Pasa un filtro de consulta a find_one() que coincide con los documentos donde el valor de unit_price es menor o igual a 20.00

  • Encadena el método skip() a find_one() para omitir los dos primeros documentos coincidentes

let result = my_coll
.find_one(doc! { "unit_price": doc! { "$lte": 20.00 } })
.skip(2)
.await?;
println!("{:#?}", result);
Some(
Inventory {
item: "watering can",
category: "garden",
unit_price: 11.99,
},
)

Utilice operaciones de agregación para recuperar y transformar datos de sus colecciones. Puede realizar operaciones de agregación con el método aggregate().

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.

Puede modificar el comportamiento del método aggregate() encadenando los métodos de generación de opciones AggregateOptions a aggregate().

La siguiente tabla describe los campos AggregateOptions de uso común que puede configurar llamando a sus métodos de generación correspondientes:

Campo
Descripción

allow_disk_use

Enables writing to temporary files. If true, aggregation stages can write data to the _tmp subdirectory in the dbPath directory.

Type: bool
Default: false

batch_size

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: u32
Default: 101 documents initially, 16 MB maximum for subsequent batches

collation

The collation to use when sorting results. To learn more about collations, see the Collations guide.

Type: Collation
Default: None

hint

The index to use for the operation. To learn more about indexes, see Indexes in the Server manual.

Type: Hint
Default: None

read_concern

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

write_concern

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.

Este ejemplo muestra cómo llamar al método aggregate() con una canalización que contiene las siguientes etapas:

  • $group Etapa para calcular el promedio del campo unit_price para cada valor del campo category

  • $sort Etapa para ordenar los resultados por avg_price en 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).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)})

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:

Para obtener más información sobre los métodos y tipos mencionados en esta guía, consulte la siguiente documentación de API:

Volver

Autenticación empresarial

En esta página