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 saber como criar um cluster MongoDB Atlas gratuito e carregar os conjuntos de dados de amostra, consulte o guia Iniciar 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.