Menu Docs
Página inicial do Docs
/ / /
Driver de fluxos reativos do Java
/

Especifique campos para retornar

Nesta página

  • Visão geral
  • Dados de amostra
  • Tipos de projeção
  • Especifique campos a serem incluídos
  • Excluir o campo _id
  • Especifique campos a serem excluídos
  • Erros de projeção
  • Erro de inclusão e exclusão
  • Informações adicionais
  • Documentação da API

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.

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 .

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.

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.

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'}

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.

A seção a seguir descreve um erro que você pode encontrar ao usar projeções.

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.

Para saber mais sobre projeções, consulte o guia Campos de projeto no manual do MongoDB Server .

Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API:

  • find()

  • Encontrar editor

Voltar

Retrieve Data