Como consultar um banco de dados MongoDB usando PyMongo em Python?

Conteúdo

Visão geral

  • Discutiremos como você pode consultar um banco de dados MongoDB usando a biblioteca PyMongo.
  • Cobriremos as operações básicas de agregação no MongoDB.

Introdução

Acompanhando a expansão global da Internet, estamos gerando dados em uma taxa sem precedentes agora. Porque a realização de qualquer tipo de análise exigiria que coletássemos / vamos consultar os dados necessários do banco de dados, é extremamente importante que escolhamos a ferramenta certa para consultar os dados. Em consequência, não podemos imaginar o uso de SQL para trabalhar com este volume de dados, já que cada consulta será cara.

query-mongodb-using-pymongo-9814919

Consultar um banco de dados MongoDB usando PyMongo

É precisamente aqui que entra o MongoDB. MongoDB é um banco de dados não estruturado que armazena dados na forma de documentos. O que mais, MongoDB pode lidar com grandes volumes de dados de forma muito eficiente e é o banco de dados NoSQL mais usado, pois oferece uma linguagem de consulta rica e acesso rápido e flexível aos dados.

Neste artigo, veremos vários exemplos de como consultar um banco de dados MongoDB usando PyMongo. O que mais, veremos como usar operadores de comparação e operadores lógicos, Noções básicas de expressão regular e pipelines de agregação.

Este artigo é uma continuação do MongoDB em Tutorial de Python para iniciantes, onde cobrimos os desafios de bancos de dados não estruturados, Operações básicas do MongoDB e etapas de instalação. Então, se você é um iniciante completo no MongoDB, Eu recomendo que você leia esse artigo primeiro.

Tabela de conteúdo

  1. O que é PyMongo?
  2. Etapas de instalação
  3. Insira os dados no banco de dados
  4. Consulte o banco de dados
    1. Filtro baseado em campo
    2. Filtrar com base em operadores de comparação
    3. Filtro baseado em operadores lógicos
    4. Expressões regulares
    5. Canais de agregação
  5. Notas finais

O que é PyMongo?

PyMongo é uma biblioteca Python que nos permite conectar com MongoDB. O que mais, esta é a maneira mais recomendada de trabalhar com MongoDB e Python.

O que mais, Escolhemos Python para interagir com MongoDB porque é uma das linguagens mais amplamente utilizadas e consideravelmente mais poderosas para Ciência de dados. O PyMongo nos permite recuperar os dados com uma sintaxe semelhante à de um dicionário.

Caso você seja um iniciante em Python, Vou recomendar que você se inscreva neste curso gratuito: Introdução ao Python.

Etapas de instalação

A instalação do PyMongo é simples e direta. Aqui, eu acho que você já tem python 3 e MongoDB instalado. O seguinte comando irá ajudá-lo a instalar o PyMongo:

pip3 install pymongo

Insira os dados no banco de dados

Agora vamos configurar as coisas antes de consultar um banco de dados MongoDB usando PyMongo. Primeiro vamos inserir os dados no banco de dados. As etapas a seguir irão ajudá-lo neste:

  1. Importe as bibliotecas e conecte-se ao cliente mongo

    Inicie o servidor MongoDB em sua máquina. Eu acho que um arquivo está sendo executado em localhost: 27017.

    Vamos começar importando algumas das bibliotecas que vamos usar. Por padrão, o servidor mongodb é executado na porta 27017 da máquina local. Mais tarde, vamos nos conectar ao cliente MongoDB usando o Pymongo Biblioteca.

    Mais tarde, obter a instância DB do banco de dados sample_db. Caso não exista., MongoDB criará um para você.

  2. Crie coleções a partir de arquivos JSON

    Usaremos dados de uma empresa de entrega de alimentos que opera em várias cidades. O que mais, eles têm vários centros de logística nessas cidades para enviar pedidos de alimentos aos seus clientes. Você pode baixar o dados e código aqui.

    1. demanda_semanal:
      • EU IRIA: ID único para cada documento
      • semana: Número da semana
      • center_id: ID único para o centro de distribuição
      • comida_id: ID único para comida
      • checkout_price: Preço final com desconto, impostos e custos de envio
      • preço base: Preço base da refeição
      • emailer_for_promotion: Emailer enviado para promoção de comida
      • homepage_featured: Comida em destaque na página inicial.
      • num_orders: (Destino) Contagem de pedidos
    2. comida_info:
      • comida_id: ID único para comida
      • categoria: Tipo de alimento (bebidas / lanches / sopas ...)
      • cozinha: Cozinha de comida (Índia / Italiano /…)

    Em seguida, vamos criar duas coleções no banco de dados sample_db:

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

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

  3. Inserir dados em coleções

    Agora, os dados que temos estão no formato JSON. Em seguida, obteremos a instância da coleção, Vamos ler o arquivo de dados e inserir os dados usando o insert_many Função.

Finalmente, tenho 456548 documentos na coleta de demanda semanal e 51 documentos na coleção de informações alimentares. Agora, Vamos dar uma olhada em um documento de cada uma dessas coleções.

coleção_semanal

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

meal_info_collection

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

Agora, nossos dados estão prontos. Vamos consultar este banco de dados.

Consulte o banco de dados

Podemos consultar um banco de dados MongoDB usando PyMonfo com o achar função para obter todos os resultados que satisfaçam a condição dada e também usando o encontre um função que retornará apenas um resultado que satisfaça a condição.

A seguir está a sintaxe de find e find_one:

sua_coleção.find( {<< consulta >>} , { << Campos>>} )

Você pode consultar o banco de dados usando as seguintes técnicas de filtragem:

  1. Filtro baseado em campo

    Por exemplo, você tem centenas de campos e deseja ver apenas alguns deles. Você pode fazer isso simplesmente colocando todos os nomes de campo obrigatórios com o valor 1. Por exemplo:

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

    Por outro lado, se você quiser descartar alguns campos apenas de todo o documento, você pode colocar os nomes dos campos iguais a 0. Portanto, apenas esses campos serão excluídos. Observe que você não pode usar uma combinação de 1 e 0 para obter os campos. Ou todos devem ser um ou todos devem ser zero.

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

  2. Filtro com uma condição

    Agora, nesta secção, iremos fornecer uma condição nas primeiras chaves e campos para descartar na segunda. Em consequência, irá devolver o primeiro documento com center_id igual a 55 e meal_id é igual a 1885 e também descartará os campos _id e semana.

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

  3. Filtrar com base em operadores de comparação

    A seguir estão os nove operadores de comparação no MongoDB.

    NOME DESCRIÇÃO
    $eq Irá corresponder valores que são iguais a um valor especificado.
    $gt Irá corresponder valores que são maiores do que um valor especificado.
    $gte Irá corresponder a todos os valores que são maiores ou iguais a um valor especificado.
    $in Irá corresponder a qualquer um dos valores especificados em uma matriz.
    $lt Irá corresponder a todos os valores que são menores do que um valor especificado.
    $lte Irá corresponder a todos os valores que são menores ou iguais a um valor especificado.
    $ne Irá corresponder a todos os valores que não são iguais a um valor especificado.
    $nin Não corresponderá a nenhum dos valores especificados em uma matriz.

    A seguir estão alguns exemplos do uso desses operadores de comparação:

    1. Igual a e diferente de

      Encontraremos todos os documentos onde center_id é igual a 55 e homepage_featured não é igual a 0. Como vamos usar a função de pesquisa, irá devolver o cursor para aquele comando. O que mais, use um loop for para percorrer os resultados da consulta.

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

    2. Na lista e não na lista

      Por exemplo, deve corresponder a um elemento com vários elementos. Nesse caso, em vez de usar o operador $ eq várias vezes, podemos usar o operador $ no. Tentaremos encontrar todos os documentos onde center_id é 24 você 11.

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

      Mais tarde, procuramos todos os documentos onde center_id não está presente na lista especificada. A consulta a seguir retornará todos os documentos onde center_id não é 24 e tampouco 11.

      result_3-9662150

    3. Menor que e Maior que

      Agora, vamos encontrar todos os documentos onde center_id é 55 e checkout_price é maior que 100 e menos que 200. Use a seguinte sintaxe para isso-

      result_4-9980613

  4. Filtro baseado em operador lógico

    NOME DESCRIÇÃO
    $and Irá juntar as cláusulas de consulta com uma lógica. AND e retorna todos os documentos que atendem às duas condições.
    $not Isso reverterá o efeito de uma consulta e retornará documentos que não são não correspondência de expressão de consulta.
    $nor Irá juntar as cláusulas de consulta com uma lógica. NOR e devolver todos os documentos que não cumpram as cláusulas.
    $or Irá juntar as cláusulas de consulta com uma lógica. OR e devolver todos os documentos que atendam às condições de qualquer uma das cláusulas.

    Os exemplos a seguir ilustram o uso de operadores lógicos:

    1. E operadora

      A consulta a seguir retornará todos os documentos onde center_id é igual a 11 e também meal_id não é igual a 1778. As subconsultas para o e O operador irá inserir uma lista.

      result_5-2958763

    2. Operador OR

      A consulta a seguir retornará todos os documentos onde center_id é igual a 11 o meal_id es 1207 o 2707. O que mais, as subconsultas para o o O operador irá inserir uma lista.

      result_6-1186208

  5. Filtro com expressões regulares

    As expressões regulares são muito úteis quando você tem campos de texto e deseja pesquisar documentos com um padrão específico. Caso você queira aprender mais sobre expressões regulares, Eu recomendo que você leia este artigo: Tutorial para iniciantes para expressões regulares em Python.

    Pode ser usado com operador. $ regex e podemos fornecer valor ao operador para que o padrão regex seja matc. Usaremos a coleção meal_info para esta consulta e, em seguida, encontraremos os documentos onde o campo da cozinha começa com o caractere C.

    result_7-9268219

    Vamos dar outro exemplo de expressões regulares. Vamos descobrir todos os documentos em que a categoria começa a partir do personagem. “S” e a cozinha termina com “Ian“.

    result_8-8426772

  6. Canais de agregação

    O MongoDB Aggregation Pipeline fornece uma estrutura para realizar uma série de transformações de dados em um conjunto de dados. A seguir está sua sintaxe:

    sua_coleção.agregar( [ { <estágio 1> }, { <estágio 2> },.. ] )
    

    A primeira etapa leva o conjunto completo de documentos como entrada e, desde ali, cada estágio subsequente leva o conjunto de resultados da transformação anterior como entrada para o próximo estágio e produz a saída.

    Existem cerca de 10 transformações disponíveis no agregado MongoDB, do qual veremos $ partida e $ grupo neste artigo. Discutiremos cada uma das transformações em detalhes no próximo artigo do MongoDB.

    Por exemplo, Na primeira fase, vamos combinar os documentos onde center_id é igual a 11 e na próxima fase, contará o número de documentos com center_id igual a 11. Observe que atribuímos o $ contar operador igual valor total_rows na segunda etapa é o nome do campo que queremos na saída.

    result_9-9401019

    Agora, vamos dar outro exemplo em que o primeiro estágio é o mesmo de antes, quer dizer, center_id é igual a 11 e na segunda fase, queremos calcular a média do campo num_orders para o center_id 11 e os únicos meal_ids para o center_id 11.

    result_10-1733037

Notas finais

A quantidade incomensurável de dados que hoje é gerada torna necessário encontrar alternativas melhores como esta para consultar os dados. Para resumir, neste artigo, aprendemos como consultar um banco de dados MongoDB usando PyMongo. O que mais, entendemos como aplicar vários filtros de acordo com a situação necessária.

Caso você queira mais informações sobre a consulta de dados, Eu recomendo o seguinte curso: Linguagem de consulta estruturada (SQL) para ciência de dados

No próximo artigo, vamos analisar pipelines de agregação em detalhes.

Eu encorajo você a experimentar as coisas por conta própria e compartilhar suas experiências na seção de comentários. O que mais, se você tiver um problema com qualquer um dos conceitos acima, sinta-se à vontade para me perguntar nos comentários abaixo.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.