Overview
En esta guía, aprenderá a usar el controlador de Scala para especificar los campos que se devolverán de una operación de lectura mediante una proyección. Una proyección es un documento que especifica los campos que MongoDB devuelve de una consulta.
Datos de muestra
Los ejemplos de esta guía utilizan el restaurants colección en la base de datos sample_restaurants de la Conjuntos de datos de muestra de Atlas. Para acceder a esta colección desde su aplicación Scala, cree un MongoClient que se conecte a un clúster de Atlas y asigne los siguientes valores a las variables database collection y:
val database: MongoDatabase = client.getDatabase("sample_restaurants") val collection: MongoCollection[Document] = database.getCollection("restaurants")
Para aprender cómo crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de muestra, consulte la guía de introducción a MongoDB.
Tipos de proyección
Puede usar una proyección para especificar qué campos incluir en un documento de retorno o qué campos excluir. No puede combinar declaraciones de inclusión y exclusión en una sola proyección, a menos que excluya el campo _id.
Especificar campos a incluir
Para especificar los campos que se incluirán en el resultado, encadene el método projection() al método find(). La clase Projections proporciona el método auxiliar include(), que puede usar para configurar los campos que se incluirán.
El siguiente ejemplo utiliza el método find() para buscar todos los restaurantes cuyo valor del campo name sea "Emerald Pub". A continuación, el código invoca los métodos projection() y include() para indicar a la operación de búsqueda que devuelva solo los campos name, cuisine y borough de los documentos coincidentes:
collection .find(equal("name", "Emerald Pub")) .projection(include("name", "cuisine", "borough")) .subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"There was an error: $e"))
{"_id": {"$oid": "..."}, "borough": "Manhattan", "cuisine": "American", "name": "Emerald Pub"} {"_id": {"$oid": "..."}, "borough": "Queens", "cuisine": "American", "name": "Emerald Pub"}
Cuando utilizas una proyección para especificar los campos que se incluirán en el documento de retorno, el campo _id también se incluye por defecto. Todos los demás campos se excluyen implícitamente. Para remover el campo _id del documento de retorno, se debe excluirlo explícitamente.
Excluir el campo _id
Al especificar los campos a incluir, también puede excluir el campo _id del documento devuelto. La clase Projections proporciona el método auxiliar excludeId() que puede usar para omitir este campo.
El siguiente ejemplo realiza la misma consulta que el ejemplo anterior, pero excluye el campo _id de la proyección:
collection .find(equal("name", "Emerald Pub")) .projection(fields(include("name", "cuisine", "borough"), excludeId())) .subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"There was an error: $e"))
{"borough": "Manhattan", "cuisine": "American", "name": "Emerald Pub"} {"borough": "Queens", "cuisine": "American", "name": "Emerald Pub"}
Especificar campos a excluir
Para especificar los campos que se excluirán del resultado, encadene el método projection() al método find(). La clase Projections proporciona el método auxiliar exclude(), que puede usar para configurar los campos que se excluirán.
El siguiente ejemplo utiliza el método find() para encontrar todos los restaurantes en los que el valor del campo name es "Emerald Pub". Luego, el código llama a los métodos projection() y exclude() para indicar a la operación de búsqueda que omita los campos name y address en el resultado:
collection .find(equal("name", "Emerald Pub")) .projection(exclude("name", "address")) .subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"There was an error: $e"))
{"_id": {"$oid": "..."}, "borough": "Manhattan", "cuisine": "American", "grades": [...], "restaurant_id": "40367329"} {"_id": {"$oid": "..."}, "borough": "Queens", "cuisine": "American", "grades": [...], "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.
Información Adicional
Para obtener más información sobre las proyecciones, consulte la guía Campos del proyecto en el manual del servidor MongoDB.
Documentación de la API
Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API: