Python Mongodb consultar documentos

Python Mongodb Python Mongodb

En MongoDB, se utilizan los métodos find y find_one para consultar los datos de la colección, similar a la sentencia SELECT en SQL.

Los datos de prueba utilizados en este artículo son los siguientes:

Consultar un documento

Podemos usarfind_one()el método para consultar un documento de la colección.

Consultarsitesel primer dato del documento:

Ejemplo

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["ejemplodb"] mycol = mydb["sites"] x = mycol.find_one() print(x)

El resultado de salida es:

{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'EJEMPLO', 'alexa': '10000', 'url': 'https://www.example.com'}

Consultar todos los datos de la colección

find()El método puede consultar todos los datos de la colección, similar aSELECT *la operación en SQL.

El siguiente ejemplo buscasitestodos los datos de la colección:

Ejemplo

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["ejemplodb"] mycol = mydb["sites"] for x in mycol.find(): print(x)

El resultado de salida es:

{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'EJEMPLO', 'alexa': '10000', 'url': 'https://www.example.com'}
{'_id': ObjectId('5b2369cac315325f3698a1cf'), 'name': 'Google', 'alexa': '1', 'url': 'https://www.google.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb6'), 'name': 'Taobao', 'alexa': '100', 'url': 'https://www.taobao.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb7'), 'name': 'QQ', 'alexa': '101', 'url': 'https://www.qq.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb8'), 'name': 'Facebook', 'alexa': '10', 'url': 'https://www.facebook.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb9'), 'name': '知乎', 'alexa': '103', 'url': 'https://www.zhihu.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbba'), 'name': 'Github', 'alexa': '109', 'url': 'https://www.github.com'}

Consultar los datos de campos específicos

Podemos usar el método find() para consultar los datos de campos específicos, estableciendo en 1 el valor correspondiente de los campos que se devolverán.

Ejemplo

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["ejemplodb"] mycol = mydb["sites"] for x in mycol.find({},{ "_id": 0, "name": 1, "alexa": 1 }): print(x)

El resultado de salida es:

{'name': 'EJEMPLO', 'alexa': '10000'}
{'name': 'Google', 'alexa': '1'}
{'name': 'Taobao', 'alexa': '100'}
{'name': 'QQ', 'alexa': '101'}
{'name': 'Facebook', 'alexa': '10'}
{'name': '知乎', 'alexa': '103'}
{'name': 'Github', 'alexa': '109'}

Excepto _id, no puedes especificar 0 y 1 al mismo tiempo en un objeto; si estableces un campo en 0, los demás serán 1, y viceversa.

El siguiente ejemplo devuelve todos los campos excepto el campo alexa:

Ejemplo

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["ejemplodb"] mycol = mydb["sites"] for x in mycol.find({},{ "alexa": 0 }): print(x)

El resultado de salida es:

{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'EJEMPLO', 'url': 'https://www.example.com'}
{'_id': ObjectId('5b2369cac315325f3698a1cf'), 'name': 'Google', 'url': 'https://www.google.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb6'), 'name': 'Taobao', 'url': 'https://www.taobao.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb7'), 'name': 'QQ', 'url': 'https://www.qq.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb8'), 'name': 'Facebook', 'url': 'https://www.facebook.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb9'), 'name': '知乎', 'url': 'https://www.zhihu.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbba'), 'name': 'Github', 'url': 'https://www.github.com'}

El siguiente código especifica 0 y 1 al mismo tiempo, por lo que se producirá un error:

Ejemplo

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["ejemplodb"] mycol = mydb["sites"] for x in mycol.find({},{ "name": 1, "alexa": 0 }): print(x)

El mensaje de error es aproximadamente el siguiente:

...
pymongo.errors.OperationFailure: Projection cannot have a mix of inclusion and exclusion.
...

Consultar según condiciones especificadas

Podemosfind()establecer parámetros en [el método] para filtrar los datos.

El siguiente ejemplo busca los datos cuyo campo name sea "EJEMPLO":

Ejemplo

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["ejemplodb"] mycol = mydb["sites"] myquery = { "name": "EJEMPLO" } mydoc = mycol.find(myquery) for x in mydoc: print(x)

El resultado de salida es:

{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'EJEMPLO', 'alexa': '10000', 'url': 'https://www.example.com'}

Consulta avanzada

En las condiciones de la consulta, también podemos usar modificadores.

El siguiente ejemplo se usa para leer los datos del campo name cuyo primer carácter tenga un valor ASCII mayor que "H"; la condición del modificador de "mayor que" es{"$gt": "H"} :

Ejemplo

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["ejemplodb"] mycol = mydb["sites"] myquery = { "name": { "$gt": "H" } } mydoc = mycol.find(myquery) for x in mydoc: print(x)

El resultado de salida es:

{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'EJEMPLO', 'alexa': '10000', 'url': 'https://www.example.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb6'), 'name': 'Taobao', 'alexa': '100', 'url': 'https://www.taobao.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb7'), 'name': 'QQ', 'alexa': '101', 'url': 'https://www.qq.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb9'), 'name': '知乎', 'alexa': '103', 'url': 'https://www.zhihu.com'}

Consultar usando expresiones regulares

También podemos usar expresiones regulares como modificadores.

Los modificadores de expresiones regulares solo se usan para buscar en campos de cadenas de texto.

El siguiente ejemplo se usa para leer los datos del campo name cuyo primer carácter sea "R"; la condición del modificador de expresión regular es{"$regex": "^R"} :

Ejemplo

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["ejemplodb"] mycol = mydb["sites"] myquery = { "name": { "$regex": "^R" } } mydoc = mycol.find(myquery) for x in mydoc: print(x)

El resultado de salida es:

{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'EJEMPLO', 'alexa': '10000', 'url': 'https://www.example.com'}

Devolver un número específico de registros

Si queremos que la consulta devuelva un número específico de registros, podemos usarlimit()el método, que solo acepta un parámetro numérico.

El siguiente ejemplo devuelve 3 documentos:

Ejemplo

import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["ejemplodb"] mycol = mydb["sites"] myresult = mycol.find().limit(3) # Resultado de salida for x in myresult: print(x)

El resultado de salida es:

{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'EJEMPLO', 'alexa': '10000', 'url': 'https://www.example.com'}
{'_id': ObjectId('5b2369cac315325f3698a1cf'), 'name': 'Google', 'alexa': '1', 'url': 'https://www.google.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb6'), 'name': 'Taobao', 'alexa': '100', 'url': 'https://www.taobao.com'}

Python Mongodb Python Mongodb

Otras extensiones