Overview
En esta guía, aprenderá a 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 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íade introducción a PyMongo.
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
Utiliza la siguiente sintaxis para especificar los campos que deseas incluir en el resultado:
{ "<Field Name>": 1 }
El siguiente ejemplo utiliza el método find() para buscar todos los restaurantes con el valor de campo name igual a "Emerald Pub". Luego, utiliza una proyección para devolver solo los campos name, cuisine y borough en los documentos devueltos. Seleccione el Synchronous o pestaña Asynchronous para ver el código correspondiente:
results = restaurants.find({ "name" : "Emerald Pub"}, {"name": 1, "cuisine": 1, "borough": 1}) for restaurant in results: print(restaurant)
{'_id': ObjectId('...'), 'borough': 'Manhattan', 'cuisine': 'American', 'name': 'Emerald Pub'} {'_id': ObjectId('...'), 'borough': 'Queens', 'cuisine': 'American', 'name': 'Emerald Pub'}
results = restaurants.find({ "name" : "Emerald Pub"}, {"name": 1, "cuisine": 1, "borough": 1}) async for restaurant in results: print(restaurant)
{'_id': ObjectId('...'), 'borough': 'Manhattan', 'cuisine': 'American', 'name': 'Emerald Pub'} {'_id': ObjectId('...'), '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.
El siguiente ejemplo realiza la misma consulta que el anterior, pero excluye el campo _id de la proyección. Seleccione la pestaña Synchronous o Asynchronous para ver el código correspondiente:
results = restaurants.find({ "name" : "Emerald Pub"}, {"_id": 0, "name": 1, "cuisine": 1, "borough": 1}) for restaurant in results: print(restaurant)
{'borough': 'Manhattan', 'cuisine': 'American', 'name': 'Emerald Pub'} {'borough': 'Queens', 'cuisine': 'American', 'name': 'Emerald Pub'}
results = restaurants.find({ "name" : "Emerald Pub"}, {"_id": 0, "name": 1, "cuisine": 1, "borough": 1}) async for restaurant in results: print(restaurant)
{'borough': 'Manhattan', 'cuisine': 'American', 'name': 'Emerald Pub'} {'borough': 'Queens', 'cuisine': 'American', 'name': 'Emerald Pub'}
Especificar campos a excluir
Utilice la siguiente sintaxis para especificar los campos que se excluirán del resultado:
{ "<Field Name>": 0 }
El siguiente ejemplo utiliza el método find() para buscar todos los restaurantes cuyo valor de campo name sea "Emerald Pub". A continuación, utiliza una proyección para excluir los campos grades y address de los documentos devueltos. Seleccione la pestaña Synchronous o Asynchronous para ver el código correspondiente:
results = restaurants.find({ "name" : "Emerald Pub"}, {"grades": 0, "address": 0} ) for restaurant in results: print(restaurant)
{'_id': ObjectId('...'), 'borough': 'Manhattan', 'cuisine': 'American', 'name': 'Emerald Pub', 'restaurant_id': '40367329'} {'_id': ObjectId('...'), 'borough': 'Queens', 'cuisine': 'American', 'name': 'Emerald Pub', 'restaurant_id': '40668598'}
results = restaurants.find({ "name" : "Emerald Pub"}, {"grades": 0, "address": 0} ) async for restaurant in results: print(restaurant)
{'_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.
Solución de problemas
Las siguientes secciones describen errores que puede ver al utilizar proyecciones.
'No se puede realizar la exclusión en el campo <field> en la proyección de inclusión'
El controlador devuelve un OperationFailure con este mensaje si intenta incluir y excluir campos en una sola proyección. Asegúrese de que su proyección especifique solo los campos que se incluirán o excluirán.
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 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: