Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Especifica un query

En esta guía, puedes aprender cómo especificar una query utilizando PyMongo.

Puede refinar el conjunto de documentos que una query devuelve creando un filtro de query. Un filtro de query es una expresión que especifica los criterios de búsqueda que MongoDB utiliza para coincidir con documentos en una operación de lectura o escritura. En un filtro de query, puede pedirle al driver que busque documentos que coincidan exactamente con su query, o puede elaborar filtros de query para expresar criterios de coincidencia más complejos.

Los ejemplos de esta guía ejecutan operaciones en una colección llamada fruits que contiene los siguientes documentos:

{ "_id": 1, "name": "apples", "qty": 5, "rating": 3, "color": "red", "type": ["fuji", "honeycrisp"] },
{ "_id": 2, "name": "bananas", "qty": 7, "rating": 4, "color": "yellow", "type": ["cavendish"] },
{ "_id": 3, "name": "oranges", "qty": 6, "rating": 2, "type": ["naval", "mandarin"] },
{ "_id": 4, "name": "pineapple", "qty": 3, "rating": 5, "color": "yellow" },

El siguiente ejemplo de código muestra cómo crear una base de datos y una colección y luego insertar los documentos de ejemplo en la colección. Seleccione el Synchronous o la pestaña Asynchronous para ver el código correspondiente:

from pymongo import MongoClient
uri = "<connection string URI>"
client = MongoClient(uri)
try:
database = client["sample_fruit"]
collection = database["fruits"]
collection.insert_many([
{ "_id": 1, "name": "apples", "qty": 5, "rating": 3, "color": "red", "type": ["fuji", "honeycrisp"] },
{ "_id": 2, "name": "bananas", "qty": 7, "rating": 4, "color": "yellow", "type": ["cavendish"] },
{ "_id": 3, "name": "oranges", "qty": 6, "rating": 2, "type": ["naval", "mandarin"] },
{ "_id": 4, "name": "pineapple", "qty": 3, "rating": 5, "color": "yellow" },
])
client.close()
except Exception as e:
raise Exception("Error inserting documents: ", e)
from pymongo import AsyncMongoClient
uri = "<connection string URI>"
client = AsyncMongoClient(uri)
try:
database = client["sample_fruit"]
collection = database["fruits"]
await collection.insert_many([
{ "_id": 1, "name": "apples", "qty": 5, "rating": 3, "color": "red", "type": ["fuji", "honeycrisp"] },
{ "_id": 2, "name": "bananas", "qty": 7, "rating": 4, "color": "yellow", "type": ["cavendish"] },
{ "_id": 3, "name": "oranges", "qty": 6, "rating": 2, "type": ["naval", "mandarin"] },
{ "_id": 4, "name": "pineapple", "qty": 3, "rating": 5, "color": "yellow" },
])
await client.close()
except Exception as e:
raise Exception("Error inserting documents: ", e)

Las queries de valores literales devuelven documentos que coinciden exactamente con su filtro de query.

El siguiente ejemplo especifica un filtro de query como un parámetro para el método find(). El código devuelve todos los documentos con un campo color con el valor de "yellow":

results = collection.find({ "color": "yellow" })
{'_id': 2, 'name': 'bananas', 'qty': 7, 'rating': 4, 'color': 'yellow', 'type': ['cavendish']}
{'_id': 4, 'name': 'pineapple', 'qty': 3, 'rating': 5, 'color': 'yellow'}

Tip

Encuentre todos los documentos

Para encontrar todos los documentos en una colección, llama al método find() y pasa un filtro de query vacío. El siguiente ejemplo encuentra todos los documentos en una colección:

results = collection.find({})

Los operadores de comparación evalúan el valor de un campo de documento con respecto a un valor especificado en tu filtro de query. La siguiente es una lista de operadores de comparación comunes:

  • $gt: Mayor que

  • $lteMenor o igual

  • $ne:No es igual

Para ver una lista completa de operadores de comparación, consulte la Comparar operadores del query guía en el manual del MongoDB Server.

El siguiente ejemplo especifica un operador de comparación en un filtro de query como parámetro del método find(). El código devuelve todos los documentos con un valor de campo rating mayor que 2:

results = collection.find({ "rating": { "$gt" : 2 }})
for f in results:
print(f)
{'_id': 1, 'name': 'apples', 'qty': 5, 'rating': 3, 'color': 'red', 'type': ['fuji', 'honeycrisp']}
{'_id': 2, 'name': 'bananas', 'qty': 7, 'rating': 4, 'color': 'yellow', 'type': ['cavendish']}
{'_id': 4, 'name': 'pineapple', 'qty': 3, 'rating': 5, 'color': 'yellow'}
results = collection.find({ "rating": { "$gt" : 2 }})
async for f in results:
print(f)
{'_id': 1, 'name': 'apples', 'qty': 5, 'rating': 3, 'color': 'red', 'type': ['fuji', 'honeycrisp']}
{'_id': 2, 'name': 'bananas', 'qty': 7, 'rating': 4, 'color': 'yellow', 'type': ['cavendish']}
{'_id': 4, 'name': 'pineapple', 'qty': 3, 'rating': 5, 'color': 'yellow'}

Los operadores lógicos sirven para coincidir con documentos mediante la lógica aplicada a los resultados de dos o más conjuntos de expresiones. La siguiente es una lista de operadores lógicos:

  • $and, que devuelve todos los documentos que coinciden con las condiciones de todas las cláusulas

  • $or, que devuelve todos los documentos que coinciden con las condiciones de una cláusula

  • $norque devuelve todos los documentos que no cumplen las condiciones de ninguna cláusula

  • $notque devuelve todos los documentos que no coinciden con la expresión

Para obtener más información sobre los operadores lógicos, consulta la guía Operadores de consulta lógica en el manual del MongoDB Server.

El siguiente ejemplo especifica un operador lógico en un filtro de query como parámetro del método find(). El código devuelve todos los documentos con un valor en el campo qty mayor que 5 o un valor de campo color igual a "yellow". Seleccione la pestaña Synchronous o Asynchronous para ver el código correspondiente:

results = collection.find({
"$or": [
{ "qty": { "$gt": 5 }},
{ "color": "yellow" }
]
})
for f in results:
print(f)
{'_id': 2, 'name': 'bananas', 'qty': 7, 'rating': 4, 'color': 'yellow', 'type': ['cavendish']}
{'_id': 3, 'name': 'oranges', 'qty': 6, 'rating': 2, 'type': ['naval', 'mandarin']}
{'_id': 4, 'name': 'pineapple', 'qty': 3, 'rating': 5, 'color': 'yellow'}
results = collection.find({
"$or": [
{ "qty": { "$gt": 5 }},
{ "color": "yellow" }
]
})
async for f in results:
print(f)
{'_id': 2, 'name': 'bananas', 'qty': 7, 'rating': 4, 'color': 'yellow', 'type': ['cavendish']}
{'_id': 3, 'name': 'oranges', 'qty': 6, 'rating': 2, 'type': ['naval', 'mandarin']}
{'_id': 4, 'name': 'pineapple', 'qty': 3, 'rating': 5, 'color': 'yellow'}

Los operadores de arreglos coinciden con documentos según el valor o la cantidad de elementos en un campo de arreglo. A continuación se encuentra una lista de los operadores de arreglos disponibles:

  • $allque devuelve documentos con arreglos que contienen todos los elementos en la query

  • $elemMatch, que devuelve documentos si un elemento en su campo de matriz coincide con todas las condiciones de la consulta

  • $size, que devuelve todos los documentos con arreglos de un tamaño específico

Para obtener más información sobre los operadores de arreglo, consulta la guía Operadores del query de arreglo en el manual de MongoDB Server.

El siguiente ejemplo especifica un operador de matriz en un filtro de consulta como parámetro del método find(). El código devuelve todos los documentos con un campo de matriz type que contiene 2 elementos. Seleccione la pestaña Synchronous o Asynchronous para ver el código correspondiente:

results = collection.find({
"type" : { "$size": 2 }
})
for f in results:
print(f)
{'_id': 1, 'name': 'apples', 'qty': 5, 'rating': 3, 'color': 'red', 'type': ['fuji', 'honeycrisp']}
{'_id': 3, 'name': 'oranges', 'qty': 6, 'rating': 2, 'type': ['naval', 'mandarin']}
results = collection.find({
"type" : { "$size": 2 }
})
async for f in results:
print(f)
{'_id': 1, 'name': 'apples', 'qty': 5, 'rating': 3, 'color': 'red', 'type': ['fuji', 'honeycrisp']}
{'_id': 3, 'name': 'oranges', 'qty': 6, 'rating': 2, 'type': ['naval', 'mandarin']}

Los operadores de elementos consultan datos según la presencia o el tipo de un campo.

Para obtener más información sobre los operadores de elementos, consulte la guía Operadores de consulta de elementos en el manual de MongoDB Server.

El siguiente ejemplo especifica un operador de elemento en un filtro de query como parámetro del método find(). El código devuelve todos los documentos que tienen un campo color. Selecciona la pestaña Synchronous o Asynchronous para ver el código correspondiente:

results = collection.find( { "color" : { "$exists": "true" }} )
for f in results:
print(f)
{'_id': 1, 'name': 'apples', 'qty': 5, 'rating': 3, 'color': 'red', 'type': ['fuji', 'honeycrisp']}
{'_id': 2, 'name': 'bananas', 'qty': 7, 'rating': 4, 'color': 'yellow', 'type': ['cavendish']}
{'_id': 4, 'name': 'pineapple', 'qty': 3, 'rating': 5, 'color': 'yellow'}
results = collection.find( { "color" : { "$exists": "true" }} )
async for f in results:
print(f)
{'_id': 1, 'name': 'apples', 'qty': 5, 'rating': 3, 'color': 'red', 'type': ['fuji', 'honeycrisp']}
{'_id': 2, 'name': 'bananas', 'qty': 7, 'rating': 4, 'color': 'yellow', 'type': ['cavendish']}
{'_id': 4, 'name': 'pineapple', 'qty': 3, 'rating': 5, 'color': 'yellow'}

Los operadores de evaluación devuelven datos basados ​​en evaluaciones de campos individuales o de los documentos de toda la colección.

La siguiente es una lista de operadores de evaluación comunes:

  • $text, la cual realiza una búsqueda de texto en los documentos

  • $regex, que devuelve documentos que coinciden con una expresión regular especificada

  • $modque realiza una operación módulo en el valor de un campo y devuelve documentos en los que el resto es un valor especificado

Para ver una lista completa de operadores de evaluación, consulta la guía Operadores de consulta de evaluación en el manual del MongoDB Server.

El siguiente ejemplo especifica un operador de evaluación en un filtro de query como un parámetro para el método find(). El código utiliza una expresión regular para devolver todos los documentos con un valor de campo name que tenga al menos dos caracteres "p" consecutivos. Selecciona la pestaña Synchronous o Asynchronous para ver el código correspondiente:

results = collection.find({ "name" : { "$regex" : "p{2,}" }} )
for f in results:
print(f)
{'_id': 1, 'name': 'apples', 'qty': 5, 'rating': 3, 'color': 'red', 'type': ['fuji', 'honeycrisp']}
{'_id': 4, 'name': 'pineapple', 'qty': 3, 'rating': 5, 'color': 'yellow'}
results = collection.find({ "name" : { "$regex" : "p{2,}" }} )
async for f in results:
print(f)
{'_id': 1, 'name': 'apples', 'qty': 5, 'rating': 3, 'color': 'red', 'type': ['fuji', 'honeycrisp']}
{'_id': 4, 'name': 'pineapple', 'qty': 3, 'rating': 5, 'color': 'yellow'}

Es común en aplicaciones web codificar los ObjectIds de los documentos en las URLs, como se muestra en el siguiente ejemplo de código:

"/posts/50b3bda58a02fb9a84d8991e"

Tu framework web pasa la parte ObjectId de la URL a tu controlador de solicitudes como una cadena. Debes convertir la cadena a una instancia ObjectId antes de pasarla al método find_one().

El siguiente ejemplo de código muestra cómo realizar esta conversión en una aplicación Flask. El proceso es similar para otros frameworks web.

from pymongo import MongoClient
from bson.objectid import ObjectId
from flask import Flask, render_template
client = MongoClient()
app = Flask(__name__)
@app.route("/posts/<_id>")
def show_post(_id):
# NOTE!: converting _id from string to ObjectId before passing to find_one
post = client.db.posts.find_one({'_id': ObjectId(_id)})
return render_template('post.html', post=post)
if __name__ == "__main__":
app.run()

Para aprender más sobre cómo realizar consultas de documentos, consulta la guía Consultar documentos en el manual de MongoDB Server.

Para obtener más información sobre cómo recuperar documentos con PyMongo, consulta Buscar documentos.

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

Documentos de query

En esta página