Docs Menu
Docs Home
/ /

Buscar documentos

En esta guía, aprenderá a usar PyMongo, el controlador síncrono de Python para MongoDB, para recuperar datos de una colección de MongoDB mediante operaciones de lectura. Puede llamar a find() o método find_one() para recuperar documentos que coinciden con un conjunto de criterios.

Los ejemplos de esta guía utilizan la colección sample_restaurants.restaurants de 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 Tutorial paraempezar a usar PyMongo.

PyMongo incluye dos métodos para recuperar documentos de una colección: find_one() y find(). Estos métodos toman un filtro de query y devuelven uno o más documentos coincidentes. Un filtro de query es un objeto que especifica los documentos que se desea recuperar en la query.

Para más información sobre los filtros de query, consultar Especificar una query.

Para encontrar un solo documento en una colección, llama al método find_one() y pasa un filtro de query que especifique los criterios del documento que desea encontrar. Si más de un documento coincide con el filtro de query, este método devuelve el primer documento coincidente de los resultados recuperados como un diccionario de Python. Si ningún documento coincide con el filtro de query, el método devuelve None.

Tip

El método find_one() es útil cuando sabe que solo hay un documento coincidente, o solo le interesa la primera coincidencia.

El siguiente ejemplo utiliza el método find_one() para encontrar el primer documento donde el campo "cuisine" tiene el valor "Bakery". Seleccione el Synchronous o pestaña Asynchronous para ver el código correspondiente:

restaurant = sample_restaurants.restaurants.find_one({"cuisine": "Bakery"})
restaurant = await sample_restaurants.restaurants.find_one({"cuisine": "Bakery"})

Tip

Orden de clasificación

El método find_one() devuelve el primer documento en orden natural en el disco si no se especifica ningún criterio de ordenación.

Para aprender más sobre clasificación, consulta la guía de clasificación.

Para encontrar varios documentos en una colección, pasar un filtro de query al método find() que especifique los criterios de los documentos que desea recuperar.

El siguiente ejemplo utiliza el método find() para encontrar todos los documentos donde el campo "cuisine" tiene el valor "Spanish".

cursor = sample_restaurants.restaurants.find({"cuisine": "Spanish"})

Se puede utilizar un cursor para iterar sobre los documentos devueltos por el método find(). Un cursor es un mecanismo que permite a una aplicación iterar sobre los resultados de una base de datos mientras mantiene solo un subconjunto de ellos en la memoria en un momento dado. Los cursores son útiles cuando el método find() devuelve una gran cantidad de documentos.

Se puede iterar sobre los documentos en un cursor usando un bucle de for-in, como se muestra en el siguiente ejemplo. Seleccionar la pestaña Synchronous o Asynchronous para ver el código correspondiente:

cursor = sample_restaurants.restaurants.find({"cuisine": "Spanish"})
for restaurant in cursor:
...
cursor = sample_restaurants.restaurants.find({"cuisine": "Spanish"})
async for restaurant in cursor:
...

Nota

Encuentre todos los documentos

Para encontrar todos los documentos en una colección, pasa un filtro vacío al método find():

all_restaurants = sample_restaurants.restaurants.find({})

Se puede modificar el comportamiento de los métodos find() y find_one() pasándoles argumentos con nombre. La siguiente tabla describe los argumentos comúnmente utilizados:

Argument
Descripción

batch_size

Limits the number of documents to hold in a cursor at a given time.

collation

The collation options for the find operation. See the Collation guide for more information.

comment

A string to attach to the query. This can help you trace and interpret the operation in the server logs and in profile data. To learn more about query comments, see the cursor.comment() page in the MongoDB Server manual.

hint

The index to use for the query.

max_time_ms

The maximum execution time on the server for this operation. If this time is exceeded, PyMongo aborts the operation and raises an ExecutionTimeout.

El siguiente ejemplo utiliza el método find() para encontrar todos los documentos donde el campo "cuisine" tiene el valor "Italian" y establece un tiempo de ejecución máximo de 10 segundos (10,000 milisegundos):

cursor = sample_restaurants.restaurants.find({"cuisine": "Italian"}, max_time_ms=10000)

Para una lista completa de argumentos disponibles, consultar la documentación de la API para el find() method.

Al realizar una query, se puede especificar una intercalación para que el controlador la siga al ordenar los resultados.

Una intercalación es un conjunto de reglas específicas del lenguaje para la comparación de strings, como el uso de mayúsculas y minúsculas y las marcas de acento.

Para especificar una intercalación, crear una instancia de la clase Collation o un diccionario de Python. Para una lista de opciones que pueda pasar al constructor Collation o incluir como claves en el diccionario, consultar Intercalación en el manual de MongoDB Server.

Tip

Intercalación de importación

Para crear una instancia de la clase Collation, se debe importar desde pymongo.collation.

El siguiente ejemplo realiza la misma operación de búsqueda que el ejemplo anterior, pero con una intercalación por defecto de fr_CA:

cursor = sample_restaurants.restaurants.find({"cuisine": "Italian"}, max_time_ms=10000,
collation=Collation(locale="fr_CA"))

Alternativamente, se puede especificar una intercalación encadenando el método collation() al método find():

cursor = sample_restaurants.restaurants.find({"cuisine": "Italian"}, max_time_ms=10000)
.collation(Collation(locale="fr_CA"))

Nota

La intercalación de operaciones anula la por defecto

Cuando se especifica una intercalación como parte de una operación, esta anula la intercalación por defecto de la colección.

Si un documento que se intenta encontrar es inválido o corrupto, el driver lanza una excepción InvalidBSON. Los siguientes ejemplos muestran cómo solucionar una excepción InvalidBSON y encontrar los documentos no válidos en la colección.

El siguiente ejemplo muestra cómo identificar documentos no válidos al iterar sobre una colección. Seleccione la pestaña Synchronous o Asynchronous para ver el código correspondiente:

import bson
# Use RawBSONDocument to delay BSON decoding
raw_coll = collection.with_options(
codec_options=collection.codec_options.with_options(
document_class=bson.raw_bson.RawBSONDocument
)
)
# Iterate through documents and check for BSON errors
for doc in raw_coll.find():
try:
bson.decode(doc.raw)
except bson.errors.InvalidBSON as exc:
print(f"Invalid document {exc}, raw bson: {doc.raw}")
import bson
# Use RawBSONDocument to delay BSON decoding
raw_coll = collection.with_options(
codec_options=collection.codec_options.with_options(
document_class=bson.raw_bson.RawBSONDocument
)
)
# Iterate through documents and check for BSON errors
async for doc in raw_coll.find():
try:
bson.decode(doc.raw)
except bson.errors.InvalidBSON as exc:
print(f"Invalid document {exc}, raw bson: {doc.raw}")

El siguiente ejemplo muestra cómo gestionar BSON no válido en las respuestas de comandos de base de datos. Selecciona la pestaña Synchronous o Asynchronous para ver el código correspondiente:

import bson
# Execute command with raw BSON options
res = client.admin.command(
"serverStatus",
codec_options=bson.raw_bson.DEFAULT_RAW_BSON_OPTIONS
)
# Check for BSON errors in the response
try:
bson.decode(res.raw)
except bson.errors.InvalidBSON as exc:
print(f"Invalid BSON found in serverStatus response {exc}, raw bson: {res.raw}")
import bson
# Execute command with raw BSON options
res = await client.admin.command(
"serverStatus",
codec_options=bson.raw_bson.DEFAULT_RAW_BSON_OPTIONS
)
# Check for BSON errors in the response
try:
bson.decode(res.raw)
except bson.errors.InvalidBSON as exc:
print(f"Invalid BSON found in serverStatus response {exc}, raw bson: {res.raw}")

La biblioteca PyMongoArrow permite cargar conjuntos de resultados de queries de MongoDB como Pandas DataFrames, NumPy ndarrays, o Tablas de Apache Arrow. Para aprender más sobre PyMongoArrow, se debe consultar la documentación de PyMongoArrow.

Para más información sobre los filtros de query, consultar Especificar una query.

Para ejemplos de código ejecutable de cómo recuperar documentos con PyMongo, consulta Query.

Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API:

Volver

Especifica un query

En esta página