Cómo utilizar PyMongo

Cómo utilizar PyMongo

  • Orquestación
6 min de lectura Actualizado Dec 9, 2020

Puntos clave: Este tutorial ofrece una guía completa sobre el uso de PyMongo, el controlador oficial de Python para MongoDB, que cubre instalación, conexión y operaciones básicas de CRUD.

  • Instala PyMongo vía pip y conéctate a MongoDB.

  • Realizar operaciones CRUD sobre colecciones y documentos.

  • Accede a recursos adicionales para continuar aprendiendo, incluida la documentación.

En este tutorial, te explicaré cómo utilizar PyMongo en MongoDB.

¿Qué están PyMongo?

PyMongo está el controlador oficial de Python que se conecta e interactúa con bases de datos de MongoDB. La biblioteca de PyMongo está siendo desarrollada activamente por el equipo de MongoDB.

Instalación de PyMongo

PyMongo se puede instalar fácilmente mediante pip en cualquier plataforma.

Cómo utilizar PyMongo

    pip install pymongo

te puede verifica la instalación de PyMongo mediante pip o intentando importar el módulo a un archivo Python.

Comprobación mediante pip:

    pip list --local

Crea un archivo Python sencillo donde importemos el módulo de PyMongo. La instrucción import está envuelta en una instrucción try-except para escribir un mensaje en la salida basado en el éxito o fracaso de la instrucción import.

    try:
import pymongo
print("Module Import Successful")
except ImportError as error:
print("Module Import Error")
print(error)

En esta sección, cubriremos el uso básico del módulo PyMongo y cómo puede emplearse para interactuar con una instalación de MongoDB. Los detalles del servidor MongoDB utilizados en este artículo son:

  • IP: 10.10.10.59
  • Porto: 27017

/etc/mongod.conf

    # network interfaces
net:
port: 27017
bindIp: 127.0.0.1, 10.10.10.59

Para permitir el acceso a la base de datos, te necesario añadir la IP externa del servidor al parámetro bindIp. te puede encontrarla en la sección de red del archivo "mongod.conf".

Aquí son las acciones que mostraré a te cómo hacer:

Conectándose a la instalación de MongoDB

Son dos formas de Define la cadena de conexión:

  • Uso de IP y puerto
  • Usando una MongoURL

Resultado:

    from pymongo import MongoClient
client = MongoClient('10.10.10.59', 27017)
# Alternative Connection Method - MongoURL Format
# client = MongoClient('mongodb://10.10.10.59:27017')
print(client.server_info())

Resultado:

En este ejemplo, hemos establecido la conexión creando una nueva instancia de la clase MongoClient con la IP y el puerto del servidor MongoDB. Luego llamamos a la función server_info() para obtener los datos sobre la instancia del servidor MongoDB.

En el siguiente ejemplo, llamamos a la función list_database_names() para Obtén una lista de todas las bases de datos.

Resultado:

    from pymongo import MongoClient
client = MongoClient('10.10.10.59', 27017)
print(client.list_database_names())

Resultado:

Obtención de colecciones de una base de datos

Usando el método list_collection_names, podemos obtener una lista de colecciones de un objeto de base de datos especificado. La include_system_collection están configurada en False para excluir cualquier colección creada por el propio sistema.

Resultado:

    from pymongo import MongoClient
# Create Connection
client = MongoClient('10.10.10.59', 27017)
# Select the Database
database = client.students
# Alternative Declaration Method
# database = client['students']
# Get List of Collections
collection = database.list_collection_names(include_system_collections=False)
print(collection)

Resultado:

Encontrar documentos en una colección

te puede utiliza el método find() para buscar cualquier documento en una Colección. Hagamos un ejemplo para entenderlo mejor.

Resultado:

El método find()

Resultado:

    from pymongo import MongoClient
# Create Connection
client = MongoClient('10.10.10.59', 27017)
# Select the Database
database = client.students
# Get Details of the specified Collection
collection = database['student_grades']
# Print each Document
for studentinfo in collection.find():
print(studentinfo)

Resultado:

te puede utiliza varios otros operadores de MongoDB, como proyección, push y pull, y ordenación, dentro del método find() para filtrar la salida.

En nuestro siguiente ejemplo, utiliza el operador de proyección MongoDB para filtrar el campo "_id" y ordenar el conjunto de datos resultante en orden descendente.

Resultado:

    from pymongo import MongoClient

# Create Connection
client = MongoClient('10.10.10.59', 27017)
# Select the Database
database = client.students
# Get Details of the specified Collection
collection = database['student_grades']
# Print each Document
for studentinfo in collection.find({},{'_id':0}).sort('name',-1):
print(studentinfo)

Resultado:

Encontrar un documento de una colección

PyMongo proporciona los métodos find_one() y find() para encontrar un único documento de una colección:

  • El método find_one() devolverá el primer documento según las condiciones dadas.
  • El método find() devolverá un objeto cursor, que están un objeto iterable que contiene métodos auxiliares adicionales para transformar los datos.

El método find_one()

Resultado:

El método find_one()

    from pymongo import MongoClient
# Create Connection
client = MongoClient('10.10.10.59', 27017)
# Select the Database
database = client.students
# Get Details of the specified Collection
collection = database['student_grades']
studentinfo = collection.find_one({'name':'Mike'})
print(studentinfo)

Resultado:

El método find()

    from pymongo import MongoClient
# Create Connection
client = MongoClient('10.10.10.59', 27017)
# Select the Database
database = client.students
# Get Details of the specified Collection
collection = database['student_grades']
studentinfo = collection.find({'name':'Mike'})
print(studentinfo)

Resultado:

Para obtener una salida legible, podemos utilizar un bucle para iterar el objeto.

Resultado:

    from pymongo import MongoClient

# Create Connection
client = MongoClient('10.10.10.59', 27017)
# Select the Database
database = client.students
# Get Details of the specified Collection
collection = database['student_grades']
studentinfo = collection.find({'name':'Mike'})
# print(studentinfo)
# Print each Document
for student in studentinfo:
print(student)

Resultado:

Creación de una base de datos, colección y documento

En esta sección, veremos cómo Crea una base de datos y una colección, y cómo insertar documentos en la nueva colección. MongoDB no Crea una base de datos hasta que están al menos un documento en la base de datos.

El siguiente ejemplo demuestra cómo Crea una base de datos llamada "food" con una colección de "postres" con un solo documento usando el método insert_one(). PyMongo crea automáticamente una nueva base de datos si la base de datos seleccionada no están disponible.

Resultado:

    from pymongo import MongoClient
# Create Connection
client = MongoClient('10.10.10.59', 27017)
print(f"Existing Databases")
print(client.list_database_names())
# Create a New Database - dictionary style
database_foods = client['foods']
# Alternative method for simple strings #
# database = client.foods
# Create a Collection - dictionary style
col_desserts = database_foods['desserts']
# Insert a Single Document
document = {'name': 'chocolate cake', 'price': 20, 'ingredients':['chocolate', 'flour', 'eggs']}
col_desserts.insert_one(document)
print(f"\nVerify the New Database")
print(client.list_database_names())
print(f"\nCollections in the Database foods")
print(database_foods.list_collection_names())
print(f"\nDocuments in the desserts Collection")
dessert = col_desserts.find()
# Print each Document
for des in dessert:
print(des)

Resultado:

Inserción de documentos en una colección

PyMongo ofrece dos métodos para insertar documentos como insert_one() y insert_many():

  • Insert_one() están se utiliza para insertar un solo documento
  • Insert_many() inserta varios documentos.

Vamos a Ve un par de ejemplos de eso con la colección de "postres".

Insertar un solo documento

Resultado:

    from pymongo import MongoClient
# Create Connection
client = MongoClient('10.10.10.59', 27017)
database_foods = client['foods']
col_desserts = database_foods['desserts']
print(f"\nAll Documents in the desserts Collection")
dessert = col_desserts.find()
# Print each Document
for des in dessert:
print(des)
# Insert a Single Document
document = {'name': 'ice cream', 'price': 10, 'ingredients':['milk', 'vanilla extract', 'eggs', 'heavy cream', 'sugar']}
col_desserts.insert_one(document)
print(f"\nAfter Insert")
dessert = col_desserts.find()
# Print each Document
for des in dessert:
print(des)

Resultado:

Inserción de múltiples documentos

Resultado:

    from pymongo import MongoClient
# Create Connection
client = MongoClient('10.10.10.59', 27017)
database_foods = client['foods']
col_desserts = database_foods['desserts']
documents = [
{'name': 'pumpkin pie', 'price': 15, 'ingredients':['pumpkin', 'condensed milk', 'eggs', 'cinnamon']},
{'name': 'chocolate chip cookies', 'price': 3, 'ingredients':['chocolate chips', 'butter', 'white sugar', 'flour', 'vanilla extract']},
{'name': 'banana pudding', 'price': 10, 'ingredients':['banana', 'white sugar', 'milk', 'flour', 'salt']}
]
col_desserts.insert_many(documents)
dessert = col_desserts.find({},{'_id':0})
# Print each Document
for des in dessert:
print(des)

Resultado:

Actualización de documentos

Los métodos update_one() y update_many() son utilizan para actualizar un solo documento o varios documentos. Los siguientes ejemplos demuestran cómo se puede emplear cada uno de estos métodos.

Actualizar un solo documento

En este ejemplo, actualizamos el campo "precio" de un documento especificado por el campo "_id". Para ello, te necesario importar la clase ObjectId del módulo "bson".

En este ejemplo, hemos actualizado el precio de una galleta de chocolate a 5.

Resultado:

    from pymongo import MongoClient
from bson.objectid import ObjectId
# Create Connection
client = MongoClient('10.10.10.59', 27017)
database_foods = client['foods']
col_desserts = database_foods['desserts']
document = {'_id': ObjectId('5fc5ebe4abb99571485ce8f0')}
updated_values = {'$set': {'price': 5}}
# Update the Document
col_desserts.update_one(document, updated_values)
# Find the Updated Document
updated_doc = col_desserts.find_one({'_id': ObjectId('5fc5ebe4abb99571485ce8f0')})
print(updated_doc)

Resultado:

Actualización de múltiples documentos

En este ejemplo, encontramos todos los documentos cuyo "nombre" comienza con la cadena "chocolate" usando el operador $regex. Luego aumentamos su precio en 5 usando el operador $inc .

Resultado:

    from pymongo import MongoClient
# Create Connection
client = MongoClient('10.10.10.59', 27017)
database_foods = client['foods']
col_desserts = database_foods['desserts']
# Find Documents that starts with chocolate
document = {"name": { "$regex": "^chocolate"}}
# Increase the existing value by five
updated_values = {'$inc': {'price': 5}}
# Update the Documents
col_desserts.update_many(document, updated_values)
# Find the Updated Documents
for des in col_desserts.find({},{'_id':0}):
print(des)

Resultado:

Eliminación de documentos, colecciones y bases de datos

Veamos cómo funciona el "borrar" dentro de PyMongo:

  • El método delete_one() elimina un solo documento.
  • El método delete_many() elimina varios archivos.
  • El método drop() elimina colecciones.
  • El método drop_database() elimina una base de datos.

Veamos un ejemplo para cada caso de utiliza.

Eliminar un solo documento

Eliminaremos un documento usando el campo "_id" como identificador.

Resultado:

    from pymongo import MongoClient
from bson.objectid import ObjectId
# Create Connection
client = MongoClient('10.10.10.59', 27017)
database_foods = client['foods']
col_desserts = database_foods['desserts']
document = {'_id': ObjectId('5fc5ebe4abb99571485ce8f0')}
# Delete the Document
col_desserts.delete_one(document)
# Find the Remaining Documents
for des in col_desserts.find():
print(des)

Resultado:

Eliminación de múltiples documentos

Eliminaremos todos los documentos cuyo precio están igual o inferior a 10 de la colección de "postres".

Resultado:

    from pymongo import MongoClient
# Create Connection
client = MongoClient('10.10.10.59', 27017)
database_foods = client['foods']
col_desserts = database_foods['desserts']
# Select only documents where price is less than or equal to 10
document = {'price': { '$lte': 10 }}
# Delete the Document
col_desserts.delete_many(document)
# Find the Remaining Documents
for des in col_desserts.find():
print(des)

Resultado:

Eliminar una colección

Una colección de MongoDB puede eliminarse usando el método drop(). Así es como eliminar la colección completa de "postres" de nuestra base de datos de alimentos.

Resultado:

    from pymongo import MongoClient
# Create Connection
client = MongoClient('10.10.10.59', 27017)
database_foods = client['foods']
# Check currently available collections
print(database_foods.list_collection_names())
# Delete the collection
col_desserts = database_foods['desserts']
col_desserts.drop()
# Print the remaining collections
print(database_foods.list_collection_names())

Resultado:

La segunda declaración impresa está vacía porque hemos eliminado la única colección de la base de datos de "alimentos".

Eliminación de la base de datos

El ejemplo siguiente muestra te cómo eliminar una base de datos completa con todas sus colecciones y documentos. Eliminaremos a los "estudiantes" usando el método drop_database().

Resultado:

    from pymongo import MongoClient
# Create Connection
client = MongoClient('10.10.10.59', 27017)
# List all databases
print(client.list_database_names())
# Check for Data within the database
database_students = client['students']
print('')
print(database_students.list_collection_names())
# Delete the complete database
client.drop_database('students')
# Verify the Deletion
print('')
print(client.list_database_names())

Resultado:

Como te puede Ve, la base de datos de "estudiantes" están eliminada por completo.

Eso es todo por este tutorial. Si te quieres conoce más sobre PyMongo, la mejor fuente están su documentación.

Lecturas relacionadas

Guía de MongoDB

  1. Resumen de MongoDB: Empezando con MongoDB
  2. Cómo instalar MongoDB en Ubuntu y Mac
  3. Creación de una base de datos en MongoDB
  4. Comandos básicos de MongoDB Shell
  5. MongoDB Compass: Uso de la interfaz gráfica de Mongo
  6. Explicación del Control de Acceso Basado en Roles (RBAC) de MongoDB
  7. Explicación de los operadores de proyección y proyección de MongoDB
  8. Explicación de las funciones agregadas de MongoDB
  9. Ordenación de MongoDB: método y ejemplos de sort()
  10. Uso de operadores de Push & Pull en MongoDB
  11. Cómo utiliza MongoDB $unwind
  12. 23 operadores comunes de consultas de MongoDB y cómo utilizarlos
  13. Ejemplos de consultas de geolocalización de MongoDB
  14. Introducción a las transacciones de MongoDB
  15. Índices de MongoDB: Principales tipos de índices y cómo gestionarlos
  16. Mejores comandos de MongoDB te necesitas saber
  17. Replicación de MongoDB: Una introducción completa
  18. Cómo configurar un clúster de MongoDB
  19. Fragmentos de MongoDB: Conceptos, Ejemplos y Tutoriales
  20. MongoDB Atlas: Configuración y uso de MongoDB gestionado
  21. Cómo ejecutar MongoDB como contenedor Docker
  22. Uso, gestión y requisitos de memoria de MongoDB
  23. Cómo utilizar Mongodump para copias de seguridad de MongoDB
  24. Ejemplos de Mongorestore para restaurar copias de seguridad de MongoDB
  25. Cómo utilizar PyMongo
  26. Cómo utilizar Mongoose para MongoDB y NodeJS
  27. Chuletas de MongoDB
  28. MongoDB vs Cassandra: Comparación de bases de datos NoSQL
  29. PostgreSQL vs MongoDB: Comparando bases de datos
  30. MySQL vs MongoDB: Comparando bases de datos
  31. Certificaciones MongoDB: Una introducción

Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.

Más de Orquestación

¿Te interesa saber más de BMC?

El Brief están nuestro correo mensual sobre el mainframe y la orquestación empresarial: investigación, historias de clientes, noticias de productos, eventos.

Al registrarse para esta oferta te son confirmar que te leído y aceptado la Política de Privacidad de BMC.

Tú te has suscrito a The Brief

El Brief abarca la orquestación de mainframe y empresa—BMC AMI y Control-M—y la investigación de analistas, despliegues de clientes y eventos en ambas áreas.