Retrieve Data
Nesta página
- Visão geral
- Dados de amostra para exemplos
- Encontrar operações
- Encontre todos os documentos correspondentes
- Encontrar um documento
- Modificar comportamento de localização
- Exemplos
- Operações de agregação
- Dados agregados do documento
- Modificar comportamento de agregação
- Exemplo
- Informações adicionais
- Documentação da API
Visão geral
Neste guia, você aprenderá como recuperar dados de sua collection do MongoDB usando operações de leitura. Operações de leitura são comandos que recuperam documentos do servidor.
Existem dois tipos de operações de leitura:
Encontrar operações, que permitem recuperar documento de suas collection
Operações de agregação, que permitem transformar os dados em sua collection
Este guia inclui as seguintes seções:
Dados de amostra para exemplos apresenta os dados de amostra que são usados pelos exemplos de operação de leitura
Operações de localização descreve como usar o driver para executar operações de localização
Operações de agregação descreve como usar o driver para executar operações de agregação
Informações adicionais fornecem links para recursos e documentação da API para os tipos e métodos mencionados neste guia
Dados de amostra para exemplos
Os exemplos deste guia usam os seguintes documentos de amostra. Cada documento representa um item no estoque de uma loja e contém informações sobre sua categorização e preço unitário:
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 saber como inserir esses dados em uma coleção, consulte o guia Inserir documentos .
Encontrar operações
Use localizar operações para recuperar dados do MongoDB. As operações de localização consistem nos métodos find()
e find_one()
.
Encontre todos os documentos correspondentes
Para encontrar todos os documentos que correspondem aos seus critérios, use o método find()
. Este método utiliza um filtro de query como parâmetro. Um filtro de query consiste nos campos e valores que formam critérios para a correspondência de documentos.
O método retorna um tipo de Cursor
que você pode iterar para recuperar quaisquer documentos que correspondam aos critérios do filtro.
Para ver um exemplo que usa esse método para recuperar dados, consulte o exemplo find().
Para saber mais sobre como especificar uma query, consulte o guia Especificar uma Consulta .
Encontrar um documento
Para encontrar o primeiro documento que corresponda aos seus critérios, use o método find_one()
. Este método utiliza um filtro de query como parâmetro. Um filtro de query consiste nos campos e valores que formam critérios para a correspondência de documentos.
Se um documento corresponder aos critérios de filtro, o método retornará um tipo de Result<Option<T>>
com um valor de Some
. Se nenhum documento corresponder aos critérios de filtro, find_one()
retornará um tipo Result<Option<T>>
com um valor de None
.
Para ver um exemplo que usa esse método para recuperar dados, consulte o exemplo find_one().
Modificar comportamento de localização
Você pode modificar o comportamento do método find()
encadeando FindOptions
métodos de construtor de opção a find()
e pode modificar o comportamento do método find_one()
encadeando FindOneOptions
métodos de construtor de opção a find_one()
.
A tabela a seguir descreve os campos FindOptions
e FindOneOptions
comumente usados que você pode definir chamando seus métodos construtores correspondentes:
Campo | Descrição |
---|---|
| The collation to use when sorting results. To learn more about collations,
see the Collations guide. Type: Collation Default: None |
| The index to use for the operation. To learn more about
indexes, see Indexes in the Server
manual. Type: Hint Default: None |
| The projection to use when returning results. Type: Document Default: 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: u64 Default: 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: Document Default: None |
Observação
Opções de configuração
Você pode definir os campos FindOptions
e FindOneOptions
encadeando os métodos do construtor de opções diretamente à chamada do método da operação de localização. Se você estiver usando uma versão anterior do driver, deverá construir uma instância FindOptions
ou FindOneOptions
encadeando métodos de construtor de opções ao método builder()
. Em seguida, passe sua instância de opções como um parâmetro para find()
ou find_one()
.
Para obter uma lista completa de configurações que você pode especificar para cada tipo, consulte a documentação da API para FindOptions e FindOneOptions.
Exemplos
As seções seguintes contêm exemplos que utilizam os métodos find()
e findOne()
para recuperar documentos de amostra que correspondem aos critérios de filtro.
Exemplo de encontrar()
Este exemplo executa as seguintes ações:
Chama o método
find()
Passa um filtro de query para
find()
que corresponde a documentos em que o valor deunit_price
é menor que12.00
e o valor decategory
não é"kitchen"
Encadeia o método
sort()
afind()
para classificar documentos correspondentes porunit_price
em ordem decrescente
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 }
Exemplo de find_one()
Este exemplo executa as seguintes ações:
Chama o método
find_one()
Passa um filtro de query para
find_one()
que corresponde a documentos em que o valor deunit_price
é menor ou igual a20.00
Encadeia o método
skip()
parafind_one()
para ignorar os dois primeiros documentos correspondentes
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, }, )
Operações de agregação
Utilize operações de agregação para recuperar e transformar dados de sua collection. Você pode executar operações de agregação usando o método aggregate()
.
Dados agregados do documento
O método aggregate()
usa um aggregation pipeline como parâmetro. Um pipeline de agregação inclui um ou mais estágios que especificam como transformar dados. Um estágio inclui um operador de agregação (prefixado com um $
) e quaisquer parâmetros exigidos para este operador.
Para saber mais sobre agregações e ver exemplos de agregação, consulte o Guia de agregação .
O método retorna os documentos resultantes em um tipo Cursor
. Se o pipeline de agregação não contiver um estágio $match , o pipeline processará todos os documentos na coleção.
Modificar comportamento de agregação
Você pode modificar o comportamento do método aggregate()
encadeando os métodos de construtor de opção AggregateOptions
para aggregate()
.
A tabela a seguir descreve os campos AggregateOptions
comumente usados que você pode definir chamando seus métodos construtores correspondentes:
Campo | Descrição |
---|---|
| Enables writing to temporary files. If true ,
aggregation stages can write data to the _tmp subdirectory in the
dbPath directory.Type: bool Default: 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: u32 Default: 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: Collation Default: None |
| The index to use for the operation. To learn more about
indexes, see Indexes in the Server
manual. Type: Hint Default: 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 obter uma lista completa das configurações, consulte a documentação da API para AggregateOptions.
Exemplo
Este exemplo mostra como chamar o método aggregate()
com um pipeline que contém os seguintes estágios:
$group
estágio para calcular a média do campounit_price
para cada valor do campocategory
$sort
estágio para ordenar resultados poravg_price
em ordem crescente
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)})
Informações adicionais
Para obter exemplos executáveis das operações de localização, consulte os seguintes exemplos de uso:
Para saber mais sobre as operações neste guia, consulte a seguinte documentação:
Guia de agregação
Guia declassificação de resultados
Documentação da API
Para saber mais sobre os métodos e tipos mencionados neste guia, consulte a documentação da API abaixo: