Docs Menu
Docs Home
/ /
/ / /

Especificar campos a devolver

En esta guía, aprenderá a usar el controlador Java Reactive Streams para especificar los campos que se devolverán en una operación de lectura. Puede seleccionar estos campos mediante una proyección, un documento que especifica los campos que MongoDB devuelve en una consulta.

Los ejemplos de esta guía utilizan el sample_restaurants.restaurants colección de la Conjuntos de datos de muestra de Atlas. Para aprender a crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de muestra, consulte Guía deinicio rápido.

Importante

Proyecto Reactor librería

Esta guía utiliza la biblioteca Project Reactor para consumir Publisher las instancias devueltas por los métodos del controlador Java Reactive Streams. Para obtener más información sobre la biblioteca Project Reactor y cómo usarla, consulte la sección "Introducción" en la documentación de Reactor. Para obtener más información sobre cómo usamos los métodos de la biblioteca Project Reactor en esta guía, consulte la guía "Escribir datos en MongoDB".

Puede usar una proyección para especificar qué campos incluir y excluir en los documentos recuperados. De forma predeterminada, al incluir ciertos campos se excluyen todos los demás, por lo que no puede combinar declaraciones de inclusión y exclusión en una sola proyección, a menos que excluya el campo _id de los resultados.

Utilice la siguiente sintaxis para especificar los campos que se incluirán en el resultado de una operación de lectura:

projection(fields(include("<field name>")))

Para usar una proyección, pase un filtro de consulta al método find(). Luego, encadene el método projection() a la llamada al método find().

El siguiente ejemplo utiliza el método find() para recuperar documentos cuyo valor del campo name es "Emerald Pub". A continuación, utiliza una proyección para incluir solo los campos name, cuisine y borough de los documentos devueltos.

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

Al usar una proyección para especificar los campos que se incluirán en el documento de retorno, el _id campo también se incluye de forma predeterminada. Todos los demás campos se excluyen implícitamente. Debe excluir explícitamente el campo _id para omitirlo de los documentos de retorno.

Puede excluir el campo _id de los documentos devueltos utilizando el método excludeId().

El siguiente ejemplo realiza la misma consulta que en el ejemplo anterior, pero también excluye el campo _id en los documentos devueltos:

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

Utilice la siguiente sintaxis para especificar los campos que se excluirán del resultado de una operación de lectura:

projection(fields(exclude("<field name>")))

Para usar una proyección, pase un filtro de consulta al método find(). Luego, encadene el método projection() a la llamada al método find().

El siguiente ejemplo utiliza el método find() para encontrar todos los restaurantes cuyo valor del campo name sea "Emerald Pub". A continuación, utiliza una proyección para excluir los campos grades y address de los documentos devueltos.

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

Cuando se utiliza una proyección para especificar qué campos excluir, cualquier campo no especificado se incluye implícitamente en el documento de retorno.

La siguiente sección describe un error que puede encontrar al utilizar proyecciones.

El controlador devuelve lo siguiente si intenta incluir y excluir campos en una sola proyección:

OperationFailure: ... Cannot Do Exclusion on Field <field> in Inclusion Projection

Para resolver este error, asegúrese de que su proyección especifique solo los campos a incluir o solo los campos a excluir.

Para obtener más información sobre las proyecciones, consulte la guía Campos del proyecto en el manual del servidor MongoDB.

Para obtener más información sobre cualquiera de los métodos o tipos discutidos en esta guía, consultar la siguiente documentación de la API:

  • find()

  • FindPublisher

Volver

Retrieve Data

En esta página