Da anni MongoDB è il database NoSQL di riferimento sia per gli individui che per le aziende che creano applicazioni su larga scala. È open source, facilmente scalabile e offre alta disponibilità. Supporta anche query molto complesse e un controllo della concorrenza a grana fine.
Tuttavia, attività necessarie come l'installazione del database, la messa a punto per mantenere prestazioni ottimali per lunghi periodi di tempo e la protezione tendono a richiedere molto impegno qualificato e dedicato.
Fortunatamente, esiste un'alternativa più semplice: MongoDB Atlas, una versione cloud completamente gestita del database.
Con MongoDB Atlas, puoi creare un cluster MongoDB su qualsiasi principale provider cloud di tua scelta e iniziare a utilizzare quel cluster in pochi minuti. Utilizzando l'interfaccia utente basata su browser di Atlas, puoi anche configurare in modo intuitivo il cluster e monitorarne le prestazioni.
In questo tutorial ti mostrerò come creare un cluster di livello gratuito Atlas MongoDB e usarlo in un'applicazione Python.
Prerequisiti
Prima di procedere, assicurati di avere installato e configurato quanto segue sul tuo computer:
- Python 3.4 o versioni successive
- Pip 18.0 o superiore
1. Creazione di un cluster
Per poter utilizzare i servizi cloud di MongoDB, avrai bisogno di un account Atlas MongoDB. Per crearne uno, vai alla sua home page e premi il pulsante Inizia gratis pulsante.
Dopo aver completato il breve modulo di registrazione, verrai reindirizzato alla procedura guidata di creazione del cluster. Nella sua prima sezione, dovrai scegliere il provider cloud e la regione che preferisci.
Per ridurre al minimo la latenza di rete, sceglieresti idealmente una regione più vicina al tuo computer. Per ora, tuttavia, poiché stiamo creando un cluster di livello gratuito, assicurati che la regione selezionata sia una con un livello gratuito disponibile. Inoltre, se utilizzi una VM Google Cloud o un'istanza Amazon EC2 come ambiente di sviluppo, seleziona prima il provider cloud corrispondente.
Nel Livello Cluster sezione, seleziona M0 opzione per creare il tuo cluster di livello gratuito. Offre 512 MB di spazio di archiviazione, una versione recente di MongoDB con WiredTiger come motore di archiviazione, un set di repliche di tre nodi e una generosa larghezza di banda di 10 GB a settimana.
Infine, dai un nome significativo al cluster e premi Crea cluster pulsante.
MongoDB Atlas impiegherà ora circa cinque minuti per configurare il tuo cluster.
2. Configurazione del cluster
Prima di iniziare a utilizzare il cluster, dovrai fornire alcuni dettagli relativi alla sicurezza, quindi passa a Sicurezza scheda.
Innanzitutto, negli Utenti MongoDB sezione, devi creare un nuovo utente per te premendo il pulsante Aggiungi nuovo utente pulsante. Nella finestra di dialogo che si apre, digita il nome utente e la password desiderati, seleziona Leggi e scrivi su qualsiasi database privilegio e premi Aggiungi utente pulsante.
Successivamente, nella Lista bianca IP sezione, devi fornire un elenco di indirizzi IP da cui accederai al cluster. Per ora è sufficiente fornire l'indirizzo IP attuale del tuo computer.
Premi Aggiungi indirizzo IP pulsante per creare una nuova voce di indirizzo IP. Nella finestra di dialogo che si apre, premi Aggiungi indirizzo IP corrente per compilare automaticamente la Voce nella whitelist campo. Inoltre, se non disponi di un indirizzo IP statico, è una buona idea contrassegnarlo come voce temporanea selezionando Salva come whitelist temporanea opzione. Infine, premi Conferma per aggiungere la voce.
3. Ottenere la stringa di connessione
Avrai bisogno di una stringa di connessione valida per connetterti al tuo cluster dalla tua applicazione. Per ottenerlo, vai alla Panoramica scheda e premi il pulsante Connetti pulsante.
Nella finestra di dialogo che si apre, seleziona Collega la tua applicazione e premi l'opzione Sto utilizzando il driver 3.6 o successivo pulsante. Ora dovresti essere in grado di vedere la tua stringa di connessione. Non avrà la tua vera password, quindi dovrai inserirla manualmente. Dopo averlo fatto, prendi nota della stringa in modo da poterla utilizzare in seguito.
4. Installazione del driver Python
Per poter interagire con il tuo cluster MongoDB Atlas a livello di codice, devi avere un driver MongoDB installato sul tuo computer. Per il linguaggio di programmazione Python, PyMongo è il driver più diffuso oggi disponibile. Il modo consigliato per installarlo sul tuo computer è usare il pip
modulo come mostrato di seguito:
python3 -m pip install pymongo --user
Potresti aver notato che la tua stringa di connessione Atlas MongoDB è un mongodb+srv://
URI. Per consentire al driver di funzionare con i record SRV DNS, devi anche installare il dnspython
modulo. Ecco come:
python3 -m pip install dnspython --user
5. Connessione al Cluster
Ora puoi utilizzare il tuo cluster MongoDB da qualsiasi applicazione Python. Per seguirmi, crea un nuovo script Python e aprilo utilizzando qualsiasi editor di codice.
All'interno dello script, per poter interagire con il cluster, avrai bisogno di un'istanza di MongoClient
classe. Come unico argomento al suo costruttore, passa la stringa di connessione.
import pymongo my_client = pymongo.MongoClient( 'mongodb+srv://alice:[email protected]/test?retryWrites=true' )
Il costruttore di cui sopra restituisce immediatamente e non genererà alcun errore. Pertanto, per verificare se hai stabilito correttamente una connessione, ti suggerisco di provare ad eseguire un'operazione sul cluster. Una chiamata al server_info()
sarà sufficiente, che ti fornisce vari dettagli sulla tua istanza MongoDB.
Se non ci sono errori nella stringa di connessione, la chiamata a server_info()
il metodo avrà successo. Tuttavia, se il nome utente o la password specificati non sono corretti, incontrerai un OperationFailure
errore. Il codice seguente mostra come catturarlo:
try: print("MongoDB version is %s" % my_client.server_info()['version']) except pymongo.errors.OperationFailure as error: print(error) quit(1)
Ora puoi andare avanti e provare a eseguire il tuo script.
6. Inserimento di documenti
La stringa di connessione predefinita che ottieni dall'interfaccia web di MongoDB Atlas menziona un database chiamato test
. Continuiamo a utilizzare lo stesso database. Ecco come puoi ottenerne un riferimento:
my_database = my_client.test
Un database MongoDB è composto da una o più raccolte, che non sono altro che gruppi di documenti BSON (abbreviazione di JSON binario). Il tuo cluster di livello gratuito su MongoDB Atlas può avere un massimo di 500 raccolte.
Per fare un esempio realistico, creiamo una nuova collezione denominata foods
. Con PyMongo, non è necessario chiamare esplicitamente alcun metodo per farlo. Puoi semplicemente fare riferimento ad esso come se esistesse già.
my_collection = my_database.foods
Vale la pena ricordare che il codice sopra non crea i foods
raccolta immediata. Viene creato solo dopo aver aggiunto un documento. Quindi ora creiamo e aggiungiamo un nuovo documento contenente dati nutrizionali su un alimento.
Usando il insert_one()
è il modo più semplice per aggiungere un documento a una raccolta. Per specificare il contenuto del documento, passi un dizionario Python al metodo. Il codice di esempio seguente mostra come:
my_collection.insert_one({ "_id": 1, "name": "pizza", "calories": 266, "fats": { "saturated": 4.5, "trans": 0.2 }, "protein": 11 })
L'aggiunta di documenti uno alla volta può essere inefficiente. Con insert_many()
metodo, puoi aggiungere più documenti alla tua raccolta contemporaneamente. Si aspetta una serie di dizionari come input. Il codice seguente aggiunge altri due documenti alla raccolta:
my_collection.insert_many([ { "_id": 2, "name": "hamburger", "calories": 295, "protein": 17, "fats": { "saturated": 5.0, "trans": 0.8 }, }, { "_id": 3, "name": "taco", "calories": 226, "protein": 9, "fats": { "saturated": 4.4, "trans": 0.5 }, } ])
Il _id
il campo che vedi nei documenti sopra è un campo utilizzato come chiave primaria da MongoDB. In quanto tale, è immutabile e deve essere presente in tutti i documenti MongoDB. Se dimentichi di includerlo durante la creazione del documento, PyMongo lo aggiungerà automaticamente e gli assegnerà un valore univoco generato automaticamente.
7. Esecuzione di query
Dopo aver aggiunto alcuni documenti alla tua raccolta, puoi eseguire query su di essi chiamando find()
metodo, che restituisce un Cursor
oggetto su cui puoi scorrere. Se non gli passi alcun argomento, find
restituisce tutti i documenti della collezione.
Il seguente codice mostra come stampare i nomi di tutti gli articoli alimentari presenti nella nostra collezione:
my_cursor = my_collection.find() for item in my_cursor: print(item["name"]) # Output is: # pizza # hamburger # taco
Se vuoi il find()
metodo per restituire solo quei documenti che soddisfano criteri specifici, devi passargli un dizionario Python. Ad esempio, se vuoi trovare il documento il cui name
il campo è impostato su "pizza", puoi utilizzare il seguente codice:
my_cursor = my_collection.find({ "name": "pizza" })
Per query più complesse, puoi utilizzare gli operatori di query dal nome intuitivo di MongoDB nei dizionari che passi a find()
metodo. Ad esempio, il codice seguente mostra come usare $lt
operatore per trovare i documenti le cui calories
campo è impostato su un valore inferiore a 280:
my_cursor = my_collection.find({ "calories": { "$lt": 280 } }) for item in my_cursor: print("Name: %s, Calories: %d" % (item["name"], item["calories"])) # Output is: # Name: pizza, Calories: 266 # Name: taco, Calories: 226
Usando la notazione del punto, puoi anche usare i campi nidificati nelle tue query. Il codice seguente mostra come trovare i documenti il cui trans
campo, che si trova all'interno di fats
campo, è impostato su un valore maggiore o uguale a 0,5:
my_cursor = my_collection.find({ "fats.trans": { "$gte": 0.5 } }) for item in my_cursor: print("Name: %s, Trans fats: %.2f" % (item["name"], item["fats"]["trans"])) # Output is: # Name: hamburger, Trans fats: 0.80 # Name: taco, Trans fats: 0.50
8. Aggiornamento ed eliminazione di documenti
Molto simile a insert_one()
e insert_many()
i metodi sono update_one()
e update_many()
metodi, che puoi utilizzare per modificare il contenuto di documenti che sono già all'interno della tua raccolta. Entrambi i metodi di aggiornamento, oltre ai nuovi dati, necessitano di una query per azzerare i documenti che devono essere modificati.
È possibile utilizzare una varietà di operatori di aggiornamento nei metodi di aggiornamento. Quello più comunemente usato è $set
, che ti consente di aggiungere nuovi campi o aggiornare i valori di campi esistenti. Il codice seguente mostra come aggiungere due nuovi campi denominati fiber
e sugar
al documento il cui name
il campo è impostato su "taco":
my_collection.update_one( { "name": "taco" }, # query { "$set": { # new data "fiber": 3.95, "sugar": 0.9 } } )
Se la query la passi a update_one()
restituisce più di un documento, solo il primo documento viene aggiornato. Il update_many()
metodo non ha questa limitazione.
Infine, utilizzando il delete_one()
e delete_many()
metodi, puoi eliminare i documenti nelle tue raccolte. Entrambi i metodi richiedono una query per determinare quali documenti devono essere eliminati. Ecco come eliminare tutti i documenti le cui calories
campo è impostato su un valore inferiore a 300:
my_collection.delete_many({ "calories": { "$lt": 300 } }) # Deletes all the three documents