Visão geral
Neste guia, você aprenderá a usar o driver Rust para especificar quais campos retornar de uma operação de leitura usando uma projeção}. Uma projeção é um documento que especifica quais campos o MongoDB retorna de uma query.
Dados de amostra
Os exemplos deste guia usam a restaurants coleção no sample_restaurants banco de dados dos conjuntos de dados de amostra do Atlas. Para acessar essa coleção a partir do seu aplicação Rust, crie um Client que se conecte a um Atlas cluster e atribua os seguintes valores às suas variáveis database collection e:
let database = client.database("sample_restaurants"); let collection: Collection<Document> = database.collection("restaurants");
Para aprender a criar um cluster MongoDB Atlas gratuito e carregar os conjuntos de dados de amostra, consulte o Guia de Introdução do MongoDB.
Tipos de projeção
Use uma projeção para especificar quais campos incluir ou excluir em um documento devolvido. Não é possível combinar declarações de inclusão e exclusão em uma única projeção, a menos que você exclua o campo _id.
Especifique campos a serem incluídos
Para incluir campos específicos no resultado de uma operação de leitura, especifique o método projection() no resultado de uma chamada de método find(). Passe um documento para o método projection() que especifique os campos a serem incluídos usando a seguinte sintaxe. Especifique um valor de 1 para incluir um campo no documento retornado e um valor de 0 para excluir um campo.
.projection(doc! { "<field_name>": 1, // Includes the field in the returned document "_id": 0 // Excludes the _id field from the returned document })
O exemplo a seguir usa o método find() para encontrar todos os restaurantes nos quais o valor do campo name é "Emerald
Pub". O código então chama o método projection() para retornar somente os campos name, cuisine e borough de documentos correspondentes.
Selecione a aba Asynchronous ou Synchronous para ver o código correspondente para cada tempo de execução:
let filter = doc! { "name": "Emerald Pub" }; let mut cursor = collection .find(filter) .projection(doc! { "name": 1, "cuisine": 1, "borough": 1 }) .await?; while let Some(result) = cursor.try_next().await? { println!("{:?}", result); }
Document({"_id": ObjectId("..."), "borough": String("Manhattan"), "cuisine": String("American"), "name": String("Emerald Pub")}) Document({"_id": ObjectId("..."), "borough": String("Queens"), "cuisine": String("American"), "name": String("Emerald Pub")})
let filter = doc! { "name": "Emerald Pub" }; let mut cursor = collection .find(filter) .projection(doc! { "name": 1, "cuisine": 1, "borough": 1 }) .run()?; for result in cursor { println!("{:?}", result?); }
Document({"_id": ObjectId("..."), "borough": String("Manhattan"), "cuisine": String("American"), "name": String("Emerald Pub")}) Document({"_id": ObjectId("..."), "borough": String("Queens"), "cuisine": String("American"), "name": String("Emerald Pub")})
Ao usar uma projeção para especificar campos a serem incluídos no documento de retorno, o _id campo também é incluído por padrão. Todos os outros campos estão implicitamente excluídos. Para remover o _id campo do documento de retorno, exclua-o explicitamente.
Exclua o campo _id
Ao especificar campos a serem incluídos, você também pode excluir o campo _id do documento retornado.
O exemplo a seguir executa a mesma query do exemplo anterior, mas exclui o campo _id da projeção. Selecione a aba Asynchronous ou Synchronous para ver o código correspondente para cada tempo de execução:
let filter = doc! { "name": "Emerald Pub" }; let mut cursor = collection.find(filter) .projection(doc! { "name": 1, "cuisine": 1, "borough": 1, "_id": 0 }) .await?; while let Some(result) = cursor.try_next().await? { println!("{:?}", result); }
Document({"borough": String("Manhattan"), "cuisine": String("American"), "name": String("Emerald Pub")}) Document({"borough": String("Queens"), "cuisine": String("American"), "name": String("Emerald Pub")})
let filter = doc! { "name": "Emerald Pub" }; let mut cursor = collection.find(filter) .projection(doc! { "name": 1, "cuisine": 1, "borough": 1, "_id": 0 }) .run()?; for result in cursor { println!("{:?}", result?); }
Document({"borough": String("Manhattan"), "cuisine": String("American"), "name": String("Emerald Pub")}) Document({"borough": String("Queens"), "cuisine": String("American"), "name": String("Emerald Pub")})
Especifique campos a serem excluídos
Para excluir campos específicos de um resultado de operação de leitura, especifique o método projection() no resultado de uma chamada de método find(). Passe um documento para o método projection() que especifica os campos a serem excluídos usando a seguinte sintaxe:
.projection(doc! { "<field_name>": 0 })
O exemplo a seguir usa o método find() para encontrar todos os restaurantes nos quais o valor do campo name é "Emerald
Pub". O código então chama o método projection() para omitir os campos grades e address do resultado. Selecione a aba Asynchronous ou Synchronous para ver o código correspondente para cada tempo de execução:
let filter = doc! { "name": "Emerald Pub" }; let mut cursor = collection.find(filter) .projection(doc! { "grades": 0, "address": 0 }) .await?; while let Some(result) = cursor.try_next().await? { println!("{:?}", result); }
Document({"_id": ObjectId("..."), "borough": String("Manhattan"), "cuisine": String("American"), "name": String("Emerald Pub"), "restaurant_id": String("40367329")}) Document({"_id": ObjectId("..."), "borough": String("Queens"), "cuisine": String("American"), "name": String("Emerald Pub"), "restaurant_id": String("40668598")})
let filter = doc! { "name": "Emerald Pub" }; let mut cursor = collection.find(filter) .projection(doc! { "grades": 0, "address": 0 }) .run()?; for result in cursor { println!("{:?}", result?); }
Document({"_id": ObjectId("..."), "borough": String("Manhattan"), "cuisine": String("American"), "name": String("Emerald Pub"), "restaurant_id": String("40367329")}) Document({"_id": ObjectId("..."), "borough": String("Queens"), "cuisine": String("American"), "name": String("Emerald Pub"), "restaurant_id": String("40668598")})
Ao usar uma projeção para especificar quais campos excluir, quaisquer campos não especificados são implicitamente incluídos no documento de retorno.
Informações adicionais
Para saber mais sobre projeções, consulte o guia Campos de projeto no manual do MongoDB Server .
Documentação da API
Para saber mais sobre o find() método, consulte a documentação da API find().