MongoDB is al jaren de go-to NoSQL-database voor zowel particulieren als bedrijven die grootschalige applicaties bouwen. Het is open source, gemakkelijk schaalbaar en biedt een hoge beschikbaarheid. Het ondersteunt ook zeer complexe query's en fijnmazige gelijktijdigheidscontrole.
Noodzakelijke taken, zoals het installeren van de database, het afstemmen ervan om optimale prestaties gedurende lange perioden te behouden en het beveiligen ervan, vereisen echter vaak veel bekwame en toegewijde inspanningen.
Gelukkig is er een eenvoudiger alternatief:MongoDB Atlas, een volledig beheerde cloudversie van de database.
Met MongoDB Atlas kunt u een MongoDB-cluster maken op elke grote cloudprovider van uw keuze en dat cluster binnen enkele minuten gaan gebruiken. Met behulp van de browsergebaseerde gebruikersinterface van Atlas kunt u het cluster ook intuïtief configureren en de prestaties ervan bewaken.
In deze zelfstudie laat ik u zien hoe u een MongoDB Atlas gratis tier-cluster maakt en deze gebruikt in een Python-toepassing.
Vereisten
Voordat u verder gaat, moet u ervoor zorgen dat het volgende op uw computer is geïnstalleerd en geconfigureerd:
- Python 3.4 of hoger
- pip 18.0 of hoger
1. Een cluster maken
Om de clouddiensten van MongoDB te kunnen gebruiken, heb je een MongoDB Atlas-account nodig. Om er een te maken, gaat u naar de startpagina en drukt u op de Aan de slag gratis knop.
Nadat u het korte aanmeldingsformulier heeft ingevuld, wordt u doorgestuurd naar de wizard voor het maken van clusters. In het eerste gedeelte moet u de cloudprovider en regio kiezen die u verkiest.
Om de netwerklatentie te minimaliseren, kiest u idealiter een regio die zich het dichtst bij uw computer bevindt. Voor nu, omdat we een gratis laagcluster maken, moet u ervoor zorgen dat de regio die u selecteert er een is met een gratis laag beschikbaar. Als u bovendien een Google Cloud VM of een Amazon EC2-instantie als ontwikkelomgeving gebruikt, moet u eerst de bijbehorende cloudprovider selecteren.
In de Clusterlaag sectie, selecteer de M0 optie om uw gratis tiercluster te maken. Het biedt 512 MB opslagruimte, een recente versie van MongoDB met WiredTiger als opslagengine, een replicaset van drie nodes en een royale 10 GB bandbreedte per week.
Geef ten slotte een betekenisvolle naam aan het cluster en druk op Cluster maken knop.
MongoDB Atlas heeft nu ongeveer vijf minuten nodig om uw cluster in te stellen.
2. Het cluster configureren
Voordat u het cluster gaat gebruiken, moet u enkele beveiligingsgerelateerde details opgeven, dus schakel over naar de Beveiliging tabblad.
Ten eerste in de MongoDB-gebruikers sectie, moet u een nieuwe gebruiker voor uzelf maken door op Nieuwe gebruiker toevoegen . te drukken knop. In het dialoogvenster dat verschijnt, typt u uw gewenste gebruikersnaam en wachtwoord, selecteert u de Lezen en schrijven naar een database en druk op de Gebruiker toevoegen knop.
Vervolgens in de IP Whitelist sectie, moet u een lijst met IP-adressen opgeven van waaruit u toegang krijgt tot het cluster. Voor nu is het opgeven van het huidige IP-adres van uw computer voldoende.
Druk op de IP-adres toevoegen om een nieuw IP-adresitem te maken. Druk in het dialoogvenster dat verschijnt op Huidige IP-adres toevoegen knop om de Invoer op de witte lijst automatisch in te vullen veld. Als u geen statisch IP-adres heeft, is het bovendien een goed idee om te markeren dat het een tijdelijke invoer is door de Opslaan als tijdelijke witte lijst aan te vinken. optie. Druk ten slotte op Bevestigen om het item toe te voegen.
3. De verbindingsreeks verkrijgen
U hebt een geldige verbindingsreeks nodig om vanuit uw toepassing verbinding te maken met uw cluster. Om het te krijgen, ga naar het Overzicht en druk op de Verbinden knop.
Selecteer in het dialoogvenster dat wordt geopend de optie Uw toepassing koppelen optie en druk op de Ik gebruik driver 3.6 of hoger knop. U zou nu uw verbindingsreeks moeten kunnen zien. Het heeft niet uw echte wachtwoord, dus u moet het handmatig invoeren. Nadat je dit hebt gedaan, noteer je de tekenreeks zodat je deze later kunt gebruiken.
4. Het Python-stuurprogramma installeren
Om programmatisch met uw MongoDB Atlas-cluster te kunnen communiceren, moet er een MongoDB-stuurprogramma op uw computer zijn geïnstalleerd. Voor de programmeertaal Python is PyMongo het populairste stuurprogramma dat momenteel beschikbaar is. De aanbevolen manier om het op uw computer te installeren, is door de pip
. te gebruiken module zoals hieronder getoond:
python3 -m pip install pymongo --user
Het is je misschien opgevallen dat je MongoDB Atlas-verbindingsreeks een mongodb+srv://
is URI. Om het stuurprogramma met DNS SRV-records te laten werken, moet u ook de dnspython
installeren module. Dit is hoe:
python3 -m pip install dnspython --user
5. Verbinding maken met het cluster
U kunt uw MongoDB-cluster nu vanuit elke Python-toepassing gebruiken. Om mij te volgen, maak je een nieuw Python-script en open je het met een code-editor.
Om in het script te kunnen communiceren met het cluster, heeft u een instantie van de MongoClient
nodig klas. Geef je verbindingsreeks door als het enige argument aan zijn constructor.
import pymongo my_client = pymongo.MongoClient( 'mongodb+srv://alice:[email protected]/test?retryWrites=true' )
De bovenstaande constructor keert onmiddellijk terug en zal geen fouten opleveren. Om te controleren of u een verbinding tot stand hebt gebracht, raad ik u daarom aan een bewerking op het cluster uit te voeren. Een aanroep naar de server_info()
methode, waarmee u verschillende details over uw MongoDB-instantie krijgt, is voldoende.
Als er geen fouten in uw verbindingsreeks zijn, wordt de aanroep naar de server_info()
methode zal slagen. Als de gebruikersnaam of het wachtwoord die je hebt opgegeven echter onjuist is, krijg je een OperationFailure
fout. De volgende code laat zien hoe je het kunt vangen:
try: print("MongoDB version is %s" % my_client.server_info()['version']) except pymongo.errors.OperationFailure as error: print(error) quit(1)
U kunt nu doorgaan en proberen uw script uit te voeren.
6. Documenten invoegen
De standaard verbindingsreeks die u van de webinterface van MongoDB Atlas krijgt, vermeldt een database met de naam test
. Laten we dezelfde database blijven gebruiken. Zo kunt u er een verwijzing naar krijgen:
my_database = my_client.test
Een MongoDB-database is samengesteld uit een of meer verzamelingen, die niets anders zijn dan groepen BSON-documenten (afkorting van binaire JSON). Uw gratis tiercluster op MongoDB Atlas kan maximaal 500 collecties hebben.
Laten we omwille van een realistisch voorbeeld een nieuwe collectie maken met de naam foods
. Met PyMongo hoeft u hiervoor geen enkele methode expliciet aan te roepen. Je kunt er gewoon naar verwijzen alsof het al bestaat.
my_collection = my_database.foods
Het is vermeldenswaard dat de bovenstaande code niet de foods
. maakt direct ophalen. Het wordt pas gemaakt nadat u er een document aan hebt toegevoegd. Dus laten we nu een nieuw document maken en toevoegen met voedingsgegevens over een voedingsmiddel.
De insert_one()
. gebruiken methode is de eenvoudigste manier om een document aan een verzameling toe te voegen. Om de inhoud van het document te specificeren, geef je een Python-woordenboek door aan de methode. De volgende voorbeeldcode laat zien hoe:
my_collection.insert_one({ "_id": 1, "name": "pizza", "calories": 266, "fats": { "saturated": 4.5, "trans": 0.2 }, "protein": 11 })
Documenten één voor één toevoegen kan inefficiënt zijn. Met de insert_many()
methode kunt u meerdere documenten tegelijk aan uw verzameling toevoegen. Het verwacht een reeks woordenboeken als invoer. De volgende code voegt nog twee documenten toe aan de collectie:
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 }, } ])
De _id
veld dat u in de bovenstaande documenten ziet, is een veld dat door MongoDB als primaire sleutel wordt gebruikt. Als zodanig is het onveranderlijk en moet het aanwezig zijn in alle MongoDB-documenten. Als u vergeet het op te nemen tijdens het maken van uw document, zal PyMongo het automatisch voor u toevoegen en er een automatisch gegenereerde unieke waarde aan toewijzen.
7. Query's uitvoeren
Als je een paar documenten aan je verzameling hebt toegevoegd, kun je er query's op uitvoeren door de find()
aan te roepen. methode, die een Cursor
. teruggeeft object dat u kunt herhalen. Als je er geen argumenten aan geeft, find
geeft alle documenten in de collectie terug.
De volgende code laat zien hoe u de namen van alle voedingsmiddelen in onze collectie kunt afdrukken:
my_cursor = my_collection.find() for item in my_cursor: print(item["name"]) # Output is: # pizza # hamburger # taco
Als je de find()
. wilt methode om alleen die documenten te retourneren die aan specifieke criteria voldoen, moet u er een Python-woordenboek aan doorgeven. Als u bijvoorbeeld het document wilt vinden waarvan de name
veld is ingesteld op "pizza", kunt u de volgende code gebruiken:
my_cursor = my_collection.find({ "name": "pizza" })
Voor complexere zoekopdrachten kunt u de intuïtief benoemde query-operators van MongoDB gebruiken in de woordenboeken die u doorgeeft aan de find()
methode. De volgende code laat u bijvoorbeeld zien hoe u de $lt
. gebruikt operator om documenten te vinden waarvan de calories
veld is ingesteld op een waarde die kleiner is dan 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
Door de puntnotatie te gebruiken, kunt u ook geneste velden in uw zoekopdrachten gebruiken. De volgende code laat zien hoe u documenten kunt vinden waarvan trans
veld, dat zich binnen de fats
. bevindt veld, is ingesteld op een waarde groter dan of gelijk aan 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. Documenten bijwerken en verwijderen
Zeer vergelijkbaar met de insert_one()
en insert_many()
methoden zijn de update_one()
en update_many()
methoden die u kunt gebruiken om de inhoud te wijzigen van documenten die al in uw verzameling staan. Beide updatemethoden hebben, naast nieuwe gegevens, een query nodig om in te zoomen op de documenten die moeten worden gewijzigd.
U kunt verschillende update-operators gebruiken in uw updatemethoden. De meest gebruikte is $set
, waarmee u nieuwe velden kunt toevoegen of de waarden van bestaande velden kunt bijwerken. De volgende code laat zien hoe u twee nieuwe velden kunt toevoegen met de naam fiber
en sugar
naar het document waarvan de name
veld is ingesteld op "taco":
my_collection.update_one( { "name": "taco" }, # query { "$set": { # new data "fiber": 3.95, "sugar": 0.9 } } )
Als de vraag die u doorgeeft aan de update_one()
methode retourneert meer dan één document, alleen het eerste document wordt bijgewerkt. De update_many()
methode heeft deze beperking niet.
Ten slotte, door de delete_one()
. te gebruiken en delete_many()
methoden kunt u documenten in uw collecties verwijderen. Beide methoden hebben een query nodig om te bepalen welke documenten moeten worden verwijderd. Zo kunt u alle documenten verwijderen waarvan de calories
veld is ingesteld op een waarde die kleiner is dan 300:
my_collection.delete_many({ "calories": { "$lt": 300 } }) # Deletes all the three documents