MongoDB-Collections mit Python erstellen
MongoDB-Collections in Python mit pymongo erstellen — explizite und implizite Erstellung, Capped Collections, Validatoren und Collection-Auflistung.
Eine Collection ist das MongoDB-Äquivalent einer Tabelle in einer relationalen Datenbank. Sie enthält eine Gruppe von Dokumenten (JSON-ähnliche Objekte) und gehört zu einer einzigen Datenbank. In diesem Kapitel werden zwei Möglichkeiten gezeigt, eine Collection mit dem Python-Treiber pymongo zu erstellen — explizit mit create_collection() und implizit durch das Einfügen des ersten Dokuments — sowie Collection-Optionen wie Capped Collections und Schema-Validatoren.
Voraussetzungen
Bevor Sie fortfahren, stellen Sie sicher, dass Sie Folgendes haben:
- Python 3.7 oder höher installiert
pymongoinstalliert (pip install pymongo)- Eine laufende MongoDB-Instanz — entweder MongoDB Atlas (Cloud) oder ein lokaler Server, der mit
mongodgestartet wurde
Siehe MongoDB Get Started für die vollständige Einrichtungsanleitung und MongoDB Create Database für die Funktionsweise von Datenbanken in MongoDB.
Verbindung zu MongoDB herstellen
Jede Collection befindet sich in einer Datenbank, daher besteht der erste Schritt immer darin, ein Datenbank-Handle zu erhalten.
Verbindung zu einem lokalen MongoDB-Server herstellen und eine Datenbank auswählen
import pymongo
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mystore"] # selects (or lazily creates) the databaseUm eine Verbindung zu MongoDB Atlas herzustellen, ersetzen Sie den Verbindungsstring durch den aus Ihrem Atlas-Dashboard:
client = pymongo.MongoClient(
"mongodb+srv://<username>:<password>@cluster0.example.mongodb.net/"
)
db = client["mystore"]Ersetzen Sie <username>, <password> und den Host durch Ihre tatsächlichen Zugangsdaten.
Explizite Collection-Erstellung
Verwenden Sie create_collection(), wenn Sie Collection-Optionen zum Erstellungszeitpunkt steuern müssen (begrenzte Größe, Schema-Validierung, Sortierung usw.).
Eine Collection explizit erstellen
import pymongo
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mystore"]
collection = db.create_collection("customers")
print("Collection created:", collection.name)
# Collection created: customerscreate_collection() löst pymongo.errors.CollectionInvalid aus, wenn eine Collection mit diesem Namen bereits existiert. Schützen Sie sich davor mit einem try/except:
Den Fall behandeln, dass die Collection bereits existiert
from pymongo.errors import CollectionInvalid
try:
collection = db.create_collection("customers")
print("Created:", collection.name)
except CollectionInvalid:
print("Collection already exists — using existing one")
collection = db["customers"]Benennungsregeln für Collections
MongoDB-Collection-Namen müssen:
- Kein leerer string sein
- Kein
$oder das Nullzeichen (\0) enthalten - Nicht mit
system.beginnen (dieses Präfix ist reserviert) - 120 Bytes nicht überschreiten, wenn sie mit dem Datenbanknamen und einem Punkt-Trennzeichen kombiniert werden
Gültige Namen: customers, order_items, 2024_logs. Ungültige Namen: $orders, system.users.
Implizite Collection-Erstellung
Der gängigste Ansatz in der täglichen Entwicklung besteht darin, MongoDB die Collection automatisch erstellen zu lassen, wenn Sie das erste Dokument einfügen. Wenn die Collection nicht existiert, erstellt MongoDB sie spontan.
Eine Collection implizit durch Einfügen eines Dokuments erstellen
import pymongo
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mystore"]
products = db["products"] # no round-trip to the server yet
result = products.insert_one({"name": "Widget", "price": 9.99, "stock": 100})
print("Inserted ID:", result.inserted_id)
# Inserted ID: 6650a1b2c3d4e5f678901234 (an ObjectId — yours will differ)Die Zuweisung db["products"] ist rein lokal; MongoDB erstellt die Collection erst, wenn der insert_one()-Aufruf den Server erreicht.
Capped Collections
Eine Capped Collection ist ein kreisförmiger Puffer mit fester Größe. Sobald sie ihre Größenbeschränkung erreicht, überschreibt MongoDB automatisch die ältesten Dokumente. Dies macht Capped Collections ideal für Logs, Audit-Trails und Event-Streams.
Eine Capped Collection erstellen (max. 1 MB, max. 1000 Dokumente)
import pymongo
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mystore"]
logs = db.create_collection(
"access_logs",
capped=True,
size=1_048_576, # maximum size in bytes (1 MB) — required for capped collections
max=1000, # optional: maximum number of documents
)
print("Capped collection created:", logs.name)
# Capped collection created: access_logsWichtige Regeln für Capped Collections:
sizeist obligatorisch, wenncapped=True;maxist optional.- Eine Capped Collection kann nicht gesharded werden.
- Dokumente in einer Capped Collection können bei einer Aktualisierung nicht über ihre ursprüngliche Größe hinauswachsen (Padding wird automatisch hinzugefügt, aber die Slot-Größe ist fest).
Schema-Validator hinzufügen
Die Schema-Validierung von MongoDB ermöglicht es Ihnen, die Dokumentstruktur auf Datenbankebene durchzusetzen. Validierungsregeln werden als JSON Schema ausgedrückt.
Eine Collection mit einem JSON Schema-Validator erstellen
import pymongo
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mystore"]
validator = {
"$jsonSchema": {
"bsonType": "object",
"required": ["name", "price"],
"properties": {
"name": {"bsonType": "string", "description": "must be a string"},
"price": {"bsonType": "double", "description": "must be a number"},
"stock": {"bsonType": "int", "description": "must be an integer"},
},
}
}
orders = db.create_collection("orders", validator=validator)
print("Collection with validator created:", orders.name)
# Collection with validator created: ordersWenn validationAction den Standardwert ("error") hat, lehnt MongoDB alle Einfügungen oder Aktualisierungen ab, die gegen das Schema verstoßen. Setzen Sie es auf "warn", um Verstöße zu protokollieren, ohne Schreibvorgänge abzulehnen.
Collections auflisten
Um zu sehen, welche Collections in einer Datenbank existieren, verwenden Sie list_collection_names(). Dies ist auch eine praktische Möglichkeit zu prüfen, ob eine Collection bereits existiert, bevor Sie create_collection() aufrufen.
Alle Collections in einer Datenbank auflisten
import pymongo
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mystore"]
names = db.list_collection_names()
print(names)
# ['customers', 'products', 'orders', 'access_logs']Prüfen, ob eine Collection existiert, bevor sie erstellt wird
if "customers" not in db.list_collection_names():
db.create_collection("customers")
print("Created customers collection")
else:
print("customers already exists")list_collection_names() gibt eine einfache Python-Liste zurück, sodass jede Listen-Operation auf das Ergebnis angewendet werden kann.
Explizite vs. implizite Erstellung wählen
| Situation | Empfohlener Ansatz |
|---|---|
| Sie benötigen eine begrenzte Größe, einen Validator oder eine benutzerdefinierte Sortierung | create_collection() mit Optionen |
| Sie möchten sicherstellen, dass die Collection vor dem Schreiben existiert | create_collection() + CollectionInvalid-Absicherung |
| Sie brauchen nur schnell einen Ort zum Speichern von Dokumenten | Implizit — ein Dokument einfügen und MongoDB die Collection erstellen lassen |
| Sie möchten die Existenz prüfen, ohne zu erstellen | list_collection_names() |
Nächste Schritte
Jetzt, da Sie eine Collection haben, können Sie mit Dokumenten arbeiten:
- MongoDB Insert — einzelne und mehrere Dokumente mit
insert_one()undinsert_many()hinzufügen - MongoDB Find — Dokumente aus einer Collection abfragen
- MongoDB Drop Collection — eine Collection löschen, wenn Sie sie nicht mehr benötigen