Overview
En esta guía, se puede aprender cómo especificar qué campos devolver de una operación de lectura utilizando una proyección. Una proyección es un documento que especifica qué campos devuelve MongoDB de una query.
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ía Comienza con PyMongo.
Tipos de proyección
Puedes usar una proyección para especificar qué campos incluir en un documento de devolución o para especificar qué campos excluir. No puedes combinar instrucciones de inclusión y exclusión en una única proyección, a menos que excluyas el campo _id.
Especifica los campos que deseas 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 encontrar todos los restaurantes con el valor del campo name de "Emerald Pub". Luego, utiliza una proyección para devolver solo los campos name, cuisine y borough en los documentos devueltos. Selecciona el Synchronous o la 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 puedes excluir el campo _id del documento devuelto.
El siguiente ejemplo realiza la misma query que el ejemplo anterior, pero excluye el campo _id de la proyección. Selecciona 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 desea excluir del resultado:
{ "<Field Name>": 0 }
El siguiente ejemplo utiliza el método find() para localizar todos los restaurantes con el valor del campo name igual a "Emerald Pub". Luego utiliza una proyección para excluir los campos grades y address de los documentos devueltos. Selecciona 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 los errores que puede ver al usar proyecciones.
'No se puede hacer 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úrate de que tu proyección especifique solo los campos a incluir o los campos a excluir.
Información Adicional
Para obtener más información sobre las proyecciones, consulte la manual de MongoDB Server Guía de campos de proyecto.
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: