Especifique campos para retornar
Nesta página
Visão geral
Neste guia, você pode aprender como usar o driver Java Reactive Streams para especificar quais campos retornar de uma operação de leitura. Você pode selecionar esses campos usando uma projeção, um documento que especifica quais campos o MongoDB retorna de uma query.
Dados de amostra
Os exemplos neste guia usam a collection sample_restaurants.restaurants
dos conjuntos de dados de amostra do Atlas. Para saber como criar um cluster gratuito do MongoDB Atlas e carregar os conjuntos de dados de amostra, consulte o guia deIntrodução .
Importante
Biblioteca do Reator do Projeto
Este guia usa a biblioteca Project Reactor para consumir instâncias do Publisher
retornadas pelos métodos de driver Java Reactive Streams. Para saber mais sobre a biblioteca do Project Reactor e como usá-la, consulte Introdução na documentação do Reactor. Para saber mais sobre como usamos os métodos da biblioteca do Project Reactor neste guia, consulte o guia Gravar dados no MongoDB .
Tipos de projeção
Você pode usar uma projeção para especificar quais campos incluir e excluir nos documentos recuperados. Por padrão, a inclusão de determinados campos exclui todos os outros campos, portanto, não é possível combinar as declarações de inclusão e exclusão em uma única projeção, a menos que você esteja excluindo o campo _id
dos resultados.
Especifique campos a serem incluídos
Use a seguinte sintaxe para especificar os campos a serem incluídos no resultado de uma operação de leitura:
projection(fields(include("<field name>")))
Para usar uma projeção, passe um filtro de query para o método find()
. Em seguida, encadeie o método projection()
à chamada de método find()
.
O exemplo a seguir usa o método find()
para recuperar documentos nos quais o valor do campo name
é "Emerald Pub"
. Em seguida, ele usa uma projeção para incluir somente os campos name
, cuisine
e borough
dos documentos retornados.
FindPublisher<Document> findProjectionPublisher = restaurants.find( eq("name", "Emerald Pub")) .projection(fields(include("name", "cuisine", "borough"))); Flux.from(findProjectionPublisher) .doOnNext(System.out::println) .blockLast();
{'_id': ObjectId('...'), 'borough': 'Manhattan', 'cuisine': 'American', 'name': 'Emerald Pub'} {'_id': 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. Você deve excluir explicitamente o campo _id para omiti-lo dos documentos devolvidos.
Excluir o campo _id
Você pode excluir o campo _id
dos documentos retornados usando o método excludeId()
.
O exemplo a seguir executa a mesma query do exemplo anterior, mas também exclui o campo _id
nos documentos retornados:
FindPublisher<Document> findProjectionPublisher = restaurants.find( eq("name", "Emerald Pub")) .projection(fields(include("name", "cuisine", "borough"), excludeId())); Flux.from(findProjectionPublisher) .doOnNext(System.out::println) .blockLast();
{'borough': 'Manhattan', 'cuisine': 'American', 'name': 'Emerald Pub'} {'borough': 'Queens', 'cuisine': 'American', 'name': 'Emerald Pub'}
Especifique campos a serem excluídos
Use a seguinte sintaxe para especificar os campos a serem excluídos do resultado de uma operação de leitura:
projection(fields(exclude("<field name>")))
Para usar uma projeção, passe um filtro de query para o método find()
. Em seguida, encadeie o método projection()
à chamada de método find()
.
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, ele usa uma projeção para excluir os campos grades
e address
dos documentos retornados.
FindPublisher<Document> findProjectionPublisher = restaurants.find( eq("name", "Emerald Pub")) .projection(fields(exclude("grades", "address"))); Flux.from(findProjectionPublisher) .doOnNext(System.out::println) .blockLast();
{'_id': ObjectId('...'), 'borough': 'Manhattan', 'cuisine': 'American', 'name': 'Emerald Pub', 'restaurant_id': '40367329'} {'_id': 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.
Erros de projeção
A seção a seguir descreve um erro que você pode encontrar ao usar projeções.
Erro de inclusão e exclusão
O driver retorna o seguinte se você tentar incluir e excluir campos em uma única projeção:
OperationFailure: ... Cannot Do Exclusion on Field <field> in Inclusion Projection
Para resolver esse erro, verifique se sua projeção especifica somente campos a serem incluídos ou somente campos a serem excluídos.
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 qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: