Visão geral
Neste guia, você pode aprender como usar o driver Ruby para especificar quais campos devem ser retornados 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 coleção restaurants no banco de dados sample_restaurants dosconjuntos de dados de amostra do Atlas. Para acessar essa coleção a partir do seu aplicação Ruby, crie um objeto Mongo::Client que se conecte a um Atlas cluster e atribua os seguintes valores às suas variáveis database e collection:
database = client.use('sample_restaurants') collection = database[: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
Você pode usar uma projeção para especificar quais campos incluir ou excluir em um documento de devolução. Você não pode combinar declarações de inclusão e exclusão em uma única projeção, a menos que esteja excluindo o campo _id.
Especifique campos a serem incluídos
Para incluir campos específicos em um resultado de operação de leitura, especifique a opção projection em um parâmetro para o método find. Para definir esta opção, use a seguinte sintaxe:
{ projection: { <field_name>: 1 } }
O exemplo a seguir usa o método find para encontrar todos os restaurantes nos quais o valor do campo name é 'Emerald Pub'. Em seguida, o código especifica a opção projection para instruir a operação de localizar a retornar somente os campos name, cuisine e borough de documentos correspondentes:
opts = { projection: { name: 1, cuisine: 1, borough: 1 } } collection.find({ name: 'Emerald Pub' }, opts).each do |doc| puts doc end
{"_id"=>BSON::ObjectId('...'), "borough"=>"Manhattan", "cuisine"=>"American", "name"=>"Emerald Pub"} {"_id"=>BSON::ObjectId('...'), "borough"=>"Queens", "cuisine"=>"American", "name"=>"Emerald Pub"}
Quando você usa uma projeção para especificar campos a serem incluídos no documento de retorno, o campo _id também é incluído por padrão. Todos os outros campos estão implicitamente excluídos. Para remover o campo _id do documento de retorno, você deve excluí-lo explicitamente.
Exclua o _id campo
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:
opts = { projection: { name: 1, cuisine: 1, borough: 1, _id: 0 } } collection.find({ name: 'Emerald Pub' }, opts).each do |doc| puts doc end
{"borough"=>"Manhattan", "cuisine"=>"American", "name"=>"Emerald Pub"} {"borough"=>"Queens", "cuisine"=>"American", "name"=>"Emerald Pub"}
Especifique campos a serem excluídos
Para excluir campos específicos de um resultado de operação de leitura, especifique a opção projection em um parâmetro para o método find. Para definir esta opção, use a seguinte sintaxe:
{ projection: { <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'. Em seguida, o código utiliza a opção projection para instruir a operação de localizar para omitir os campos grades e address no resultado:
opts = { projection: { grades: 0, address: 0 } } collection.find({ name: 'Emerald Pub' }, opts).each do |doc| puts doc end
{"_id"=>BSON::ObjectId('...'), "borough"=>"Manhattan", "cuisine"=>"American", "name"=>"Emerald Pub", "restaurant_id"=>"40367329"} {"_id"=>BSON::ObjectId('...'), "borough"=>"Queens", "cuisine"=>"American", "name"=>"Emerald Pub", "restaurant_id"=>"40668598"}
Quando você usa 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 método find, consulte a documentação API.