Come interrogare un database MongoDB usando PyMongo in Python?

Contenuti

Panoramica

  • Discuteremo come puoi interrogare un database MongoDB usando la libreria PyMongo.
  • Tratteremo le operazioni di aggregazione di base in MongoDB.

introduzione

Dopo l'espansione globale di Internet, stiamo generando dati a un ritmo senza precedenti ora. Perché condurre qualsiasi tipo di analisi ci richiederebbe di raccogliere / consultiamo i dati necessari dal database, è estremamente importante scegliere lo strumento giusto per consultare i dati. Di conseguenza, non possiamo immaginare di usare SQL per lavorare con questo volume di dati, poiché ogni consulenza sarà costosa.

query-mongodb-using-pymongo-9814919

Interroga un database MongoDB usando PyMongo

È proprio qui che entra in gioco MongoDB. MongoDB è un database non strutturato che memorizza i dati sotto forma di documenti. Cosa c'è di più, MongoDB può gestire grandi volumi di dati in modo molto efficiente ed è il database NoSQL più utilizzato, in quanto offre un ricco linguaggio di query e un accesso rapido e flessibile ai dati.

In questo articolo, vedremo diversi esempi di come interrogare un database MongoDB usando PyMongo. Cosa c'è di più, vedremo come utilizzare operatori di confronto e operatori logici, nozioni di base sulle espressioni regolari e sulle pipeline di aggregazione.

Questo articolo è una continuazione del tutorial MongoDB in Python per principianti, dove copriamo le sfide dei database non strutturati, Operazioni di base di MongoDB e passaggi di installazione. Quindi, se sei un principiante assoluto su MongoDB, Ti consiglierei di leggere prima quell'articolo.

Sommario

  1. Cos'è PyMongo?
  2. Fasi di installazione
  3. Inserisci i dati nel database
  4. Consulta la banca dati
    1. Filtro basato sul campo
    2. Filtro basato su operatori di confronto
    3. Filtro basato su operatori logici
    4. Espressioni regolari
    5. Tubi di aggregazione
  5. Note finali

Cos'è PyMongo?

PyMongo è una libreria Python che ci permette di connetterci con MongoDB. Cosa c'è di più, questo è il modo più consigliato per lavorare con MongoDB e Python.

Cosa c'è di più, Abbiamo scelto Python per interagire con MongoDB perché è uno dei linguaggi più utilizzati e notevolmente più potenti per Scienza dei dati. PyMongo ci permette di recuperare i dati con una sintassi simile a quella di un dizionario.

Nel caso tu sia un principiante in Python, Ti consiglio di iscriverti a questo corso gratuito: Introduzione a Python.

Fasi di installazione

L'installazione di PyMongo è semplice e diretta. Qui, immagino che tu abbia già Python 3 e MongoDB installato. Il seguente comando ti aiuterà a installare PyMongo:

pip3 installare pymongo

Inserire i dati nel database

Ora impostiamo le cose prima di interrogare un database MongoDB usando PyMongo. Per prima cosa inseriremo i dati nel database. I seguenti passaggi ti aiuteranno in questo:

  1. Importare le librerie e connettersi al client mongo

    Avviare il server MongoDB sul computer. Immagino che un file sia in esecuzione su localhost: 27017.

    Iniziamo importando alcune delle librerie che useremo. Per impostazione predefinita, Server MongoDB in esecuzione sulla porta 27017 dalla macchina locale. Dopo, ci collegheremo al client MongoDB usando il Pymongo Biblioteca.

    Dopo, ottieni l'istanza db da sample_db db. Nel caso non ci fosse, MongoDB ne creerà uno per te.

  2. Crea le raccolte dai file JSON

    Utilizzeremo i dati di un'azienda di consegna di cibo che opera in più città. Cosa c'è di più, hanno diversi centri logistici in queste città per inviare ordini di cibo ai loro clienti. Puoi scaricare il dati e codice qui.

    1. richiesta_settimanale:
      • ID: ID univoco per ogni documento
      • settimana: Numero della settimana
      • center_id: ID univoco per il centro logistico
      • id_cibo: ID cibo univoco
      • checkout_price: Prezzo finale con sconto, tasse e spese di spedizione
      • prezzo base: Prezzo base del pasto
      • emailer_for_promotion: E-mail inviata per la promozione del cibo
      • homepage_featured: Cibo in primo piano nella home page.
      • num_ordini: (Destino) Conteggio ordini
    2. food_info:
      • id_cibo: ID univoco per il cibo
      • categoria: Tipo di cibo (bevande / spuntini / zuppe….)
      • cucina: Cucina alimentare (India / italiana /…)

    Quindi creeremo due raccolte nel database sample_db:

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

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

  3. Inserisci i dati nelle raccolte

    Ora, i dati che abbiamo sono in formato JSON. Quindi otterremo l'istanza della raccolta, Leggeremo il file di dati e inseriremo i dati utilizzando il tasto inserire_molti funzione.

Finalmente, avere 456548 documenti nella raccolta settimanale della domanda e 51 documenti nella raccolta di informazioni sugli alimenti. Ora, Diamo un'occhiata a un documento di ciascuna di queste raccolte.

collezione_settimanale

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

meal_info_collection

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

Ora, i nostri dati sono pronti. Andiamo a consultare questo database.

Consulta la banca dati

Possiamo interrogare un database MongoDB usando PyMonfo con il trova funzione per ottenere tutti i risultati che soddisfano la condizione data e utilizzando anche il trova uno funzione che restituirà solo un risultato che soddisfa la condizione.

La seguente è la sintassi di find e find_one:

tua_collezione.trova( {<< interrogazione >>} , { << campi>>} )

È possibile interrogare il database utilizzando le seguenti tecniche di filtraggio:

  1. Filtro basato sul campo

    Ad esempio, hai centinaia di campi e vuoi vederne solo alcuni. Puoi farlo semplicemente inserendo tutti i nomi dei campi richiesti con il valore 1. Ad esempio:

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

    In secondo luogo, se vuoi eliminare alcuni campi solo dall'intero documento, puoi mettere i nomi dei campi uguali a 0. Perciò, solo quei campi saranno esclusi. Nota che non puoi usare una combinazione di 1 e 0 per ottenere i campi. O tutti devono essere uno o tutti devono essere zero.

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

  2. Filtra con una condizione

    Ora, in questa sezione, forniremo una condizione nelle prime parentesi graffe e campi da scartare nella seconda. Di conseguenza, restituirà il primo documento con center_id uguale 55 e id_pasto è uguale a 1885 e scarterà anche i campi _id e week.

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

  3. Filtro basato su operatori di confronto

    I seguenti sono i nove operatori di confronto in MongoDB.

    NOME DESCRIZIONE
    $eq Corrisponde a valori uguali a un valore specificato.
    $gt Corrisponde a valori maggiori di un valore specificato.
    $gte Corrisponde a tutti i valori che sono maggiori o uguali a un valore specificato.
    $in Corrisponde a uno qualsiasi dei valori specificati in un array.
    $lt Corrisponde a tutti i valori inferiori a un valore specificato.
    $lte Corrisponde a tutti i valori inferiori o uguali a un valore specificato.
    $ne Corrisponde a tutti i valori che non sono uguali a un valore specificato.
    $nin Non corrisponderà a nessuno dei valori specificati in un array.

    Di seguito sono riportati alcuni esempi dell'uso di questi operatori di confronto:

    1. Uguale a e non uguale a

      Troveremo tutti i documenti in cui center_id è uguale a 55 e homepage_featured non è uguale a 0. Come utilizzeremo la funzione di ricerca, restituirà il cursore per quel comando. Cosa c'è di più, usa un ciclo for per scorrere i risultati della query.

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

    2. In lista e non in lista

      Ad esempio, deve corrispondere a un elemento con più elementi. Quindi, invece di usare l'operatore $ eq più volte, possiamo usare l'operatore $ in. Cercheremo di trovare tutti i documenti in cui si trova center_id 24 tu 11.

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

      Dopo, cerchiamo tutti i documenti in cui center_id non è presente nell'elenco specificato. La seguente query restituirà tutti i documenti in cui center_id non è 24 e nemmeno 11.

      risultato_3-9662150

    3. Minore e Maggiore di

      Ora, troviamo tutti i documenti dove si trova center_id 55 e checkout_price è maggiore di 100 e meno di 200. Usa la seguente sintassi per questo-

      risultato_4-9980613

  4. Filtro basato su operatore logico

    NOME DESCRIZIONE
    $and Unirà le clausole di query con una logica. AND e restituisce tutti i documenti che soddisfano entrambe le condizioni.
    $not Invertirà l'effetto di una query e restituirà documenti che non lo sono no corrisponde all'espressione della query.
    $nor Unirà le clausole di query con una logica. NOR e restituire tutti i documenti non conformi alle clausole.
    $or Unirà le clausole di query con una logica. OR e restituire tutti i documenti che soddisfano le condizioni di una qualsiasi delle clausole.

    Gli esempi seguenti illustrano l'uso degli operatori logici:

    1. E operatore

      La seguente query restituirà tutti i documenti in cui center_id è uguale 11 e anche meal_id non è uguale a 1778. Le subquery per e L'operatore inserirà una lista.

      risultato_5-2958763

    2. Operatore OR

      La seguente query restituirà tutti i documenti in cui center_id è uguale 11 o id_pasto es 1207 oh 2707. Cosa c'è di più, le subquery per il oh L'operatore inserirà una lista.

      risultato_6-1186208

  5. Filtra con espressioni regolari

    Le espressioni regolari sono molto utili quando hai campi di testo e vuoi cercare documenti con uno schema specifico. Nel caso in cui desideri saperne di più sulle espressioni regolari, Ti consiglio di leggere questo articolo: Tutorial per principianti per le espressioni regolari in Python.

    Può essere utilizzato con operatore. $ regex e possiamo fornire valore all'operatore in modo che il modello regex sia matc. Useremo la raccolta meal_info per questa query e poi troveremo i documenti in cui il campo cucina inizia con carattere C.

    risultato_7-9268219

    Facciamo un altro esempio di espressioni regolari. Scopriremo tutti i documenti in cui la categoria parte dal personaggio. “S” e la cucina finisce con “Ian“.

    risultato_8-8426772

  6. Tubi di aggregazione

    La MongoDB Aggregation Pipeline fornisce un framework per eseguire una serie di trasformazioni di dati su un set di dati. Quella che segue è la sua sintassi:

    tua_collezione.aggregato( [ { <fase 1> }, { <Fase 2> },.. ] )
    

    La prima fase prende l'intera serie di documenti come input e, da li, ogni fase successiva prende il set di risultati della trasformazione precedente come input per la fase successiva e produce l'output.

    Ci sono in giro 10 trasformazioni disponibili nell'aggregato MongoDB, di cui vedremo $ incontro e $ gruppo in questo articolo. Discuteremo in dettaglio ciascuna delle trasformazioni nel prossimo articolo MongoDB.

    Ad esempio, Nella prima fase, abbineremo i documenti in cui center_id è uguale 11 e nella fase successiva, conterà il numero di documenti con center_id uguale a 11. Si prega di notare che abbiamo assegnato il $ contare operatore uguale valore righe_totali nella seconda fase questo è il nome del campo che vogliamo nell'output.

    risultato_9-9401019

    Ora, facciamo un altro esempio in cui il primo stadio è lo stesso di prima, vale a dire, center_id è uguale a 11 e nella seconda fase, vogliamo calcolare la media del campo num_orders per center_id 11 e gli unici meal_ids per center_id 11.

    risultato_10-1733037

Note finali

L'insondabile quantità di dati che viene generata oggi rende necessario trovare alternative migliori come questa per consultare i dati. Per riassumere, in questo articolo, abbiamo imparato come interrogare un database MongoDB usando PyMongo. Cosa c'è di più, abbiamo capito come applicare vari filtri a seconda della situazione richiesta.

Nel caso in cui desideri maggiori informazioni sulla query dei dati, Consiglio il seguente corso: Structured Query Language (SQL) per la scienza dei dati

Nel prossimo articolo, analizzeremo in dettaglio le pipeline di aggregazione.

Ti incoraggio a provare le cose da solo e a condividere le tue esperienze nella sezione commenti. Cosa c'è di più, se hai un problema con uno dei concetti di cui sopra, sentiti libero di chiedermelo nei commenti qui sotto.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.