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 com Atlas .
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.