MongoDB ist seit Jahren die NoSQL-Datenbank der Wahl für Einzelpersonen und Unternehmen, die umfangreiche Anwendungen erstellen. Es ist Open Source, leicht skalierbar und bietet Hochverfügbarkeit. Es unterstützt auch sehr komplexe Abfragen und eine feinkörnige Parallelitätssteuerung.
Notwendige Aufgaben wie das Installieren der Datenbank, das Optimieren, um über lange Zeiträume eine optimale Leistung aufrechtzuerhalten, und das Sichern der Datenbank erfordern jedoch in der Regel viel qualifizierte und engagierte Arbeit.
Glücklicherweise gibt es eine einfachere Alternative: MongoDB Atlas, eine vollständig verwaltete Cloud-Version der Datenbank.
Mit MongoDB Atlas können Sie einen MongoDB-Cluster auf einem beliebigen großen Cloud-Anbieter Ihrer Wahl erstellen und diesen Cluster innerhalb weniger Minuten verwenden. Mit der browserbasierten Benutzeroberfläche von Atlas können Sie den Cluster auch intuitiv konfigurieren und seine Leistung überwachen.
In dieser Anleitung zeige ich Ihnen, wie Sie einen MongoDB Atlas-Cluster im kostenlosen Kontingent erstellen und in einer Python-Anwendung verwenden.
Voraussetzungen
Bevor Sie fortfahren, vergewissern Sie sich, dass Folgendes auf Ihrem Computer installiert und konfiguriert ist:
- Python 3.4 oder höher
- Pip 18.0 oder höher
1. Erstellen eines Clusters
Um die Cloud-Dienste von MongoDB nutzen zu können, benötigen Sie ein MongoDB-Atlas-Konto. Um eine zu erstellen, gehen Sie auf die Startseite und klicken Sie auf Jetzt kostenlos starten Schaltfläche.
Nachdem Sie das kurze Anmeldeformular ausgefüllt haben, werden Sie zum Cluster-Erstellungsassistenten weitergeleitet. Im ersten Abschnitt müssen Sie den Cloud-Anbieter und die Region auswählen, die Sie bevorzugen.
Um die Netzwerklatenz zu minimieren, wählen Sie idealerweise eine Region aus, die Ihrem Computer am nächsten liegt. Da wir jedoch einen Free-Tarif-Cluster erstellen, stellen Sie vorerst sicher, dass die von Ihnen ausgewählte Region eine Free-Tarif-Region hat. Wenn Sie außerdem eine Google Cloud-VM oder eine Amazon EC2-Instance als Entwicklungsumgebung verwenden, wählen Sie zuerst den entsprechenden Cloud-Anbieter aus.
In der Cluster-Ebene Wählen Sie im Abschnitt M0 aus Option zum Erstellen Ihres Free-Tarif-Clusters. Es bietet 512 MB Speicherplatz, eine aktuelle Version von MongoDB mit WiredTiger als Speicher-Engine, einen Replikatsatz aus drei Knoten und großzügige 10 GB Bandbreite pro Woche.
Geben Sie abschließend dem Cluster einen aussagekräftigen Namen und klicken Sie auf Cluster erstellen Schaltfläche.
MongoDB Atlas benötigt nun etwa fünf Minuten, um Ihren Cluster einzurichten.
2. Konfigurieren des Clusters
Bevor Sie mit der Verwendung des Clusters beginnen, müssen Sie einige sicherheitsrelevante Details angeben, also wechseln Sie zu Sicherheit Registerkarte.
Zuerst in den MongoDB-Benutzern müssen Sie einen neuen Benutzer für sich selbst erstellen, indem Sie auf Neuen Benutzer hinzufügen klicken Taste. Geben Sie im angezeigten Dialogfeld Ihren gewünschten Benutzernamen und Ihr Passwort ein und wählen Sie Lesen und in beliebige Datenbank schreiben Privileg, und klicken Sie auf Benutzer hinzufügen Schaltfläche.
Als nächstes in der IP Whitelist Abschnitt müssen Sie eine Liste der IP-Adressen angeben, von denen aus Sie auf den Cluster zugreifen. Für den Moment reicht es aus, die aktuelle IP-Adresse Ihres Computers anzugeben.
Drücken Sie auf IP-Adresse hinzufügen Schaltfläche, um einen neuen IP-Adresseintrag zu erstellen. Drücken Sie im angezeigten Dialogfeld auf Aktuelle IP-Adresse hinzufügen Schaltfläche zum automatischen Ausfüllen des Whitelist-Eintrags Feld. Wenn Sie keine statische IP-Adresse haben, ist es außerdem eine gute Idee, sie als temporären Eintrag zu markieren, indem Sie die Option Als temporäre Whitelist speichern aktivieren Möglichkeit. Drücken Sie abschließend auf Bestätigen um den Eintrag hinzuzufügen.
3. Abrufen der Verbindungszeichenfolge
Sie benötigen eine gültige Verbindungszeichenfolge, um von Ihrer Anwendung aus eine Verbindung zu Ihrem Cluster herzustellen. Rufen Sie dazu die Übersicht auf und drücken Sie auf Verbinden Schaltfläche.
Wählen Sie im sich öffnenden Dialogfeld die Option Verbinden Sie Ihre Anwendung aus Option und drücken Sie die Ich verwende Treiber 3.6 oder höher Taste. Sie sollten jetzt Ihre Verbindungszeichenfolge sehen können. Es enthält nicht Ihr eigentliches Passwort, also müssen Sie es manuell eingeben. Notieren Sie sich anschließend die Zeichenfolge, damit Sie sie später verwenden können.
4. Installation des Python-Treibers
Um programmgesteuert mit Ihrem MongoDB-Atlas-Cluster interagieren zu können, muss auf Ihrem Computer ein MongoDB-Treiber installiert sein. Für die Programmiersprache Python ist PyMongo der derzeit beliebteste Treiber. Die empfohlene Methode zur Installation auf Ihrem Computer ist die Verwendung von pip
Modul wie unten gezeigt:
python3 -m pip install pymongo --user
Sie haben vielleicht bemerkt, dass Ihre MongoDB-Atlas-Verbindungszeichenfolge ein mongodb+srv://
ist URI. Damit der Treiber mit DNS-SRV-Einträgen arbeiten kann, müssen Sie auch dnspython
installieren Modul. So geht's:
python3 -m pip install dnspython --user
5. Verbinden mit dem Cluster
Sie können Ihren MongoDB-Cluster jetzt von jeder Python-Anwendung aus verwenden. Um mir zu folgen, erstellen Sie ein neues Python-Skript und öffnen Sie es mit einem beliebigen Code-Editor.
Innerhalb des Skripts benötigen Sie eine Instanz von MongoClient
, um mit dem Cluster interagieren zu können Klasse. Übergeben Sie als einziges Argument an seinen Konstruktor Ihre Verbindungszeichenfolge.
import pymongo my_client = pymongo.MongoClient( 'mongodb+srv://alice:[email protected]/test?retryWrites=true' )
Der obige Konstruktor kehrt sofort zurück und löst keine Fehler aus. Um zu überprüfen, ob Sie erfolgreich eine Verbindung hergestellt haben, schlage ich daher vor, dass Sie versuchen, eine Operation auf dem Cluster durchzuführen. Ein Aufruf von server_info()
-Methode aus, die Ihnen verschiedene Details zu Ihrer MongoDB-Instanz liefert.
Wenn Ihre Verbindungszeichenfolge keine Fehler enthält, wird der Aufruf von server_info()
Methode wird gelingen. Wenn der von Ihnen angegebene Benutzername oder das angegebene Passwort jedoch falsch ist, tritt ein OperationFailure
auf Error. Der folgende Code zeigt Ihnen, wie Sie es abfangen:
try: print("MongoDB version is %s" % my_client.server_info()['version']) except pymongo.errors.OperationFailure as error: print(error) quit(1)
Sie können jetzt fortfahren und versuchen, Ihr Skript auszuführen.
6. Dokumente einfügen
Die standardmäßige Verbindungszeichenfolge, die Sie von der Weboberfläche von MongoDB Atlas erhalten, erwähnt eine Datenbank namens test
. Lassen Sie uns weiterhin dieselbe Datenbank verwenden. So erhalten Sie einen Verweis darauf:
my_database = my_client.test
Eine MongoDB-Datenbank besteht aus einer oder mehreren Sammlungen, die nichts anderes sind als Gruppen von BSON-Dokumenten (kurz für binäres JSON). Ihr Free-Tarif-Cluster auf MongoDB Atlas kann maximal 500 Sammlungen haben.
Als realistisches Beispiel erstellen wir eine neue Sammlung mit dem Namen foods
. Mit PyMongo müssen Sie dazu keine Methode explizit aufrufen. Sie können einfach darauf verweisen, als ob es bereits existiert.
my_collection = my_database.foods
Es ist erwähnenswert, dass der obige Code die foods
nicht erstellt Abholung sofort. Es wird erst erstellt, nachdem Sie ihm ein Dokument hinzugefügt haben. Lassen Sie uns nun ein neues Dokument erstellen und hinzufügen, das Nährwertdaten zu einem Lebensmittel enthält.
Verwenden von insert_one()
-Methode ist die einfachste Möglichkeit, ein Dokument zu einer Sammlung hinzuzufügen. Um den Inhalt des Dokuments anzugeben, übergeben Sie der Methode ein Python-Wörterbuch. Der folgende Beispielcode zeigt Ihnen wie:
my_collection.insert_one({ "_id": 1, "name": "pizza", "calories": 266, "fats": { "saturated": 4.5, "trans": 0.2 }, "protein": 11 })
Das Hinzufügen von Dokumenten nacheinander kann ineffizient sein. Mit insert_many()
-Methode können Sie mehrere Dokumente gleichzeitig zu Ihrer Sammlung hinzufügen. Es erwartet eine Reihe von Wörterbüchern als Eingabe. Der folgende Code fügt der Sammlung zwei weitere Dokumente hinzu:
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 }, } ])
Die _id
Feld, das Sie in den obigen Dokumenten sehen, ist ein Feld, das von MongoDB als Primärschlüssel verwendet wird. Als solches ist es unveränderlich und muss in allen MongoDB-Dokumenten vorhanden sein. Wenn Sie vergessen, es beim Erstellen Ihres Dokuments einzufügen, fügt PyMongo es automatisch für Sie hinzu und weist ihm einen automatisch generierten eindeutigen Wert zu.
7. Ausführen von Abfragen
Wenn Sie Ihrer Sammlung einige Dokumente hinzugefügt haben, können Sie Abfragen darauf ausführen, indem Sie find()
aufrufen -Methode, die einen Cursor
zurückgibt Objekt, über das Sie iterieren können. Wenn Sie ihm keine Argumente übergeben, find
gibt alle Dokumente in der Sammlung zurück.
Der folgende Code zeigt Ihnen, wie Sie die Namen aller Lebensmittel in unserer Sammlung drucken können:
my_cursor = my_collection.find() for item in my_cursor: print(item["name"]) # Output is: # pizza # hamburger # taco
Wenn Sie das find()
wollen Um nur die Dokumente zurückzugeben, die bestimmten Kriterien entsprechen, müssen Sie ihr ein Python-Wörterbuch übergeben. Wenn Sie beispielsweise das Dokument suchen möchten, dessen name
Feld auf "Pizza" gesetzt ist, könnten Sie den folgenden Code verwenden:
my_cursor = my_collection.find({ "name": "pizza" })
Für komplexere Abfragen können Sie die intuitiv benannten Abfrageoperatoren von MongoDB in den Wörterbüchern verwenden, die Sie an find()
übergeben Methode. Der folgende Code zeigt Ihnen beispielsweise, wie Sie $lt
verwenden Operator, um Dokumente zu finden, deren calories
Feld auf einen Wert kleiner als 280 gesetzt ist:
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
Durch die Verwendung der Punktnotation können Sie in Ihren Abfragen auch verschachtelte Felder verwenden. Der folgende Code zeigt Ihnen, wie Sie Dokumente finden, deren trans
Feld, das sich innerhalb von fats
befindet auf einen Wert festgelegt, der größer oder gleich 0,5 ist:
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. Aktualisieren und Löschen von Dokumenten
Sehr ähnlich zu insert_one()
und insert_many()
Methoden sind die update_one()
und update_many()
Methoden, mit denen Sie den Inhalt von Dokumenten ändern können, die sich bereits in Ihrer Sammlung befinden. Beide Aktualisierungsmethoden benötigen zusätzlich zu neuen Daten eine Abfrage, um die zu ändernden Dokumente einzugrenzen.
Sie können eine Vielzahl von Aktualisierungsoperatoren in Ihren Aktualisierungsmethoden verwenden. Das am häufigsten verwendete ist $set
, mit dem Sie neue Felder hinzufügen oder die Werte vorhandener Felder aktualisieren können. Der folgende Code zeigt Ihnen, wie Sie zwei neue Felder namens fiber
hinzufügen und sugar
zu dem Dokument, dessen name
Feld ist auf "taco" gesetzt:
my_collection.update_one( { "name": "taco" }, # query { "$set": { # new data "fiber": 3.95, "sugar": 0.9 } } )
Übergeben Sie die Abfrage an update_one()
-Methode mehr als ein Dokument zurückgibt, wird nur das erste Dokument aktualisiert. Das update_many()
Methode hat diese Einschränkung nicht.
Zuletzt durch Verwendung von delete_one()
und delete_many()
Methoden können Sie Dokumente in Ihren Sammlungen löschen. Beide Methoden benötigen eine Abfrage, um festzustellen, welche Dokumente gelöscht werden müssen. So löschen Sie alle Dokumente, deren calories
Feld auf einen Wert kleiner als 300 gesetzt ist:
my_collection.delete_many({ "calories": { "$lt": 300 } }) # Deletes all the three documents