¿Cómo consultar una base de datos MongoDB usando PyMongo en Python?

Contenidos

Visión general

  • Discutiremos cómo puede consultar una base de datos MongoDB usando la biblioteca PyMongo.
  • Cubriremos las operaciones básicas de agregación en MongoDB.

Introducción

Tras la expansión global de Internet, estamos generando datos a un ritmo sin precedentes ahora. Debido a que realizar cualquier tipo de análisis requeriría que recopilemos / consultemos los datos necesarios de la base de datos, es de suma importancia que elijamos la herramienta adecuada para consultar los datos. En consecuencia, no podemos imaginarnos usando SQL para trabajar con este volumen de datos, ya que cada consulta será costosa.

query-mongodb-using-pymongo-9814919

Consultar una base de datos MongoDB usando PyMongo

Aquí es precisamente donde entra MongoDB. MongoDB es una base de datos no estructurada que almacena datos en forma de documentos. Además, MongoDB puede manejar grandes volúmenes de datos de manera muy eficiente y es la base de datos NoSQL más utilizada, ya que ofrece un lenguaje de consulta rico y un acceso rápido y flexible a los datos.

En este artículo, veremos varios ejemplos de cómo consultar una base de datos MongoDB usando PyMongo. Además, veremos cómo utilizar los operadores de comparación y los operadores lógicos, la expresión regular y los conceptos básicos de las canalizaciones de agregación.

Este artículo es una continuación del Tutorial de MongoDB en Python para principiantes, donde cubrimos los desafíos de las bases de datos no estructuradas, los pasos de instalación y las operaciones básicas de MongoDB. Entonces, si es un principiante completo en MongoDB, le recomendaría que lea ese artículo primero.

Tabla de contenido

  1. ¿Qué es PyMongo?
  2. Pasos de instalación
  3. Inserta los datos en la base de datos
  4. Consultar la base de datos
    1. Filtro basado en campos
    2. Filtro basado en operadores de comparación
    3. Filtro basado en operadores lógicos
    4. Expresiones regulares
    5. Tuberías de agregación
  5. Notas finales

¿Qué es PyMongo?

PyMongo es una biblioteca de Python que nos permite conectarnos con MongoDB. Además, esta es la forma más recomendada de trabajar con MongoDB y Python.

Además, hemos elegido Python para interactuar con MongoDB porque es uno de los lenguajes más utilizados y considerablemente más potentes para Ciencia de los datos. PyMongo nos permite recuperar los datos con una sintaxis similar a la de un diccionario.

En caso de que seas un principiante en Python, te recomendaré que te inscribas en este curso gratuito: Introducción a Python.

Pasos de instalación

Instalar PyMongo es simple y sencillo. Aquí, supongo que ya tiene Python 3 y MongoDB instalados. El siguiente comando le ayudará a instalar PyMongo:

pip3 install pymongo

Inserte los datos en la base de datos

Ahora configuremos las cosas antes de consultar una base de datos MongoDB usando PyMongo. Primero insertaremos los datos en la base de datos. Los siguientes pasos lo ayudarán en esto:

  1. Importar las bibliotecas y conectarse al cliente mongo

    Inicie el servidor MongoDB en su máquina. Supongo que se está ejecutando un archivo en localhost: 27017.

    Comencemos importando algunas de las bibliotecas que vamos a utilizar. De forma predeterminada, el servidor MongoDB se ejecuta en el puerto 27017 de la máquina local. Luego, nos conectaremos al cliente MongoDB usando el Pymongo Biblioteca.

    Luego, obtenga la instancia de base de datos de la base de datos sample_db. En caso de que no exista, MongoDB creará uno para usted.

  2. Crea las colecciones a partir de los archivos JSON

    Usaremos los datos de una empresa de entrega de comidas que opera en varias ciudades. Además, tienen varios centros logísticos en estas ciudades para enviar pedidos de comida a sus clientes. Puede descargar el datos y el código aquí.

    1. demanda_semanal:
      • identificación: ID único para cada documento
      • semana: Número de la semana
      • center_id: ID único para el centro logístico
      • comida_id: ID único para comida
      • checkout_price: Precio final con descuento, impuestos y gastos de envío
      • precio base: Precio base de la comida
      • emailer_for_promotion: Emailer enviado para la promoción de la comida
      • homepage_featured: Comida presentada en la página de inicio.
      • num_orders: (Destino) Recuento de pedidos
    2. comida_info:
      • comida_id: ID único para la comida
      • categoría: Tipo de comida (bebidas / snacks / sopas….)
      • cocina: Cocina de comida (india / italiana /…)

    Luego crearemos dos colecciones en la base de datos sample_db:

    screenshot-from-2020-08-18-01-34-57-4989570

    screenshot-from-2020-08-18-01-35-10-4366550

  3. Insertar datos en colecciones

    Ahora, los datos que tenemos están en formato JSON. Luego obtendremos la instancia de la colección, leeremos el archivo de datos e insertaremos los datos usando el insert_many función.

Finalmente, tenemos 456548 documentos en la colección de demanda semanal y 51 documentos en la colección de información de comidas. Ahora, echemos un vistazo a un documento de cada una de estas colecciones.

colección_de_de_semanal

screenshot-from-2020-08-18-01-36-57-9527843

meal_info_collection

screenshot-from-2020-08-18-01-37-17-5694111

Ahora, nuestros datos están listos. Pasemos a consultar esta base de datos.

Consultar la base de datos

Podemos consultar una base de datos MongoDB usando PyMonfo con el encontrar función para obtener todos los resultados que satisfacen la condición dada y también usando la Encuentra uno función que devolverá solo un resultado que satisfaga la condición.

La siguiente es la sintaxis de find y find_one:

your_collection.find( {<< query >>} , { << fields>>} )

Puede consultar la base de datos utilizando las siguientes técnicas de filtrado:

  1. Filtro basado en campos

    Por ejemplo, tiene cientos de campos y desea ver solo algunos de ellos. Puede hacerlo simplemente poniendo todos los nombres de campo obligatorios con el valor 1. Por ejemplo:

    screenshot-from-2020-08-18-01-38-49-4552120

    Por otro lado, si desea descartar algunos campos solo del documento completo, puede poner los nombres de los campos iguales a 0. Por lo tanto, solo esos campos serán excluidos. Tenga en cuenta que no puede utilizar una combinación de 1 y 0 para obtener los campos. O todos deben ser uno o todos deben ser cero.

    screenshot-from-2020-08-18-01-39-38-7933201

  2. Filtrar con una condición

    Ahora, en esta sección, proporcionaremos una condición en las primeras llaves y campos para descartar en la segunda. En consecuencia, devolverá el primer documento con center_id es igual a 55 y meal_id es igual a 1885 y también descartará los campos _id y week.

    screenshot-from-2020-08-18-01-40-27-4463234

  3. Filtro basado en operadores de comparación

    Los siguientes son los nueve operadores de comparación en MongoDB.

    NOMBRE DESCRIPCIÓN
    $eq Coincidirá con los valores que sean iguales a un valor especificado.
    $gt Coincidirá con los valores que sean mayores que un valor especificado.
    $gte Coincidirá con todos los valores que sean mayores o iguales a un valor especificado.
    $in Coincidirá con cualquiera de los valores especificados en una matriz.
    $lt Coincidirá con todos los valores que sean menores que un valor especificado.
    $lte Coincidirá con todos los valores que sean menores o iguales a un valor especificado.
    $ne Coincidirá con todos los valores que no sean iguales a un valor especificado.
    $nin No coincidirá con ninguno de los valores especificados en una matriz.

    Los siguientes son algunos ejemplos del uso de estos operadores de comparación:

    1. Igual que y no igual a

      Encontraremos todos los documentos donde center_id es igual a 55 y homepage_featured no es igual a 0. Como vamos a usar la función de búsqueda, devolverá el cursor para ese comando. Además, use un bucle for para recorrer en iteración los resultados de la consulta.

      screenshot-from-2020-08-18-01-41-19-9573970

    2. En la lista y no en la lista

      Por ejemplo, debe hacer coincidir un elemento con varios elementos. En ese caso, en lugar de usar el operador $ eq varias veces, podemos usar el operador $ in. Intentaremos encontrar todos los documentos donde center_id sea 24 u 11.

      screenshot-from-2020-08-18-01-43-39-2455630

      Luego, buscamos todos los documentos donde center_id no está presente en la lista especificada. La siguiente consulta devolverá todos los documentos donde center_id no es 24 y tampoco 11.

      result_3-9662150

    3. Menor que y Mayor que

      Ahora, busquemos todos los documentos donde center_id es 55 y checkout_price es mayor que 100 y menor que 200. Use la siguiente sintaxis para esto-

      result_4-9980613

  4. Filtro basado en operador lógico

    NOMBRE DESCRIPCIÓN
    $and Unirá las cláusulas de consulta con una lógica. AND y devuelve todos los documentos que cumplen ambas condiciones.
    $not Invertirá el efecto de una consulta y devolverá documentos que no no coincidir con la expresión de la consulta.
    $nor Unirá las cláusulas de consulta con una lógica. NOR y devuelva todos los documentos que no cumplan con las cláusulas.
    $or Unirá las cláusulas de consulta con una lógica. OR y devuelva todos los documentos que coincidan con las condiciones de cualquiera de las cláusulas.

    Los siguientes ejemplos ilustran el uso de operadores lógicos:

    1. Y operador

      La siguiente consulta devolverá todos los documentos donde center_id es igual a 11 y también meal_id no es igual a 1778. Las subconsultas para el y El operador entrará en una lista.

      result_5-2958763

    2. Operador OR

      La siguiente consulta devolverá todos los documentos donde center_id es igual a 11 o meal_id es 1207 o 2707. Además, las subconsultas para el o El operador entrará en una lista.

      result_6-1186208

  5. Filtrar con expresiones regulares

    Las expresiones regulares son de gran utilidad cuando tiene campos de texto y desea buscar documentos con un patrón específico. En caso de que desee obtener más información sobre las expresiones regulares, le recomiendo que lea este artículo: Tutorial para principiantes de expresiones regulares en Python.

    Se puede utilizar con el operador. $ regex y podemos proporcionar valor al operador para que el patrón de expresiones regulares sea matc. Usaremos la colección meal_info para esta consulta y luego encontraremos los documentos donde el campo de cocina comienza con carácter C.

    result_7-9268219

    Tomemos otro ejemplo de expresiones regulares. Descubriremos todos los documentos en los que la categoría comienza desde el personaje. «S» y la cocina termina con «Ian“.

    result_8-8426772

  6. Tuberías de agregación

    La canalización de agregación de MongoDB proporciona un marco para realizar una serie de transformaciones de datos en un conjunto de datos. La siguiente es su sintaxis:

    your_collection.aggregate( [ { <stage1> }, { <stage2> },.. ] )
    

    La primera etapa toma el conjunto completo de documentos como entrada y, desde allí, cada etapa subsiguiente toma el conjunto de resultados de la transformación anterior como entrada para la siguiente etapa y produce la salida.

    Hay alrededor de 10 transformaciones disponibles en el agregado de MongoDB, de las cuales veremos $ partido y $ grupo en este articulo. Discutiremos cada una de las transformaciones en detalle en el próximo artículo de MongoDB.

    Por ejemplo, en la primera etapa, haremos coincidir los documentos donde center_id es igual a 11 y en la siguiente etapa, contará el número de documentos con center_id igual a 11. Tenga en cuenta que hemos asignado el $ count operador el valor igual total_rows en la segunda etapa que es el nombre del campo que queremos en la salida.

    result_9-9401019

    Ahora, tomemos otro ejemplo donde la primera etapa es la misma que antes, es decir, center_id es igual a 11 y en la segunda etapa, queremos calcular el promedio del campo num_orders para el center_id 11 y los únicos meal_ids para el center_id 11.

    result_10-1733037

Notas finales

La insondable cantidad de datos que se generan hoy en día hace necesario encontrar mejores alternativas como esta para consultar datos. Para resumir, en este artículo, aprendimos cómo consultar una base de datos MongoDB usando PyMongo. Además, entendimos cómo aplicar varios filtros según la situación requerida.

En caso de que desee obtener más información sobre la consulta de datos, le recomiendo el siguiente curso: Lenguaje de consulta estructurado (SQL) para ciencia de datos

En el próximo artículo, analizaremos las canalizaciones de agregación en detalle.

Te animo a que pruebes cosas por tu cuenta y compartas tus experiencias en la sección de comentarios. Además, si tiene algún problema con alguno de los conceptos anteriores, no dude en preguntarme en los comentarios a continuación.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.