W3docs

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
  • pymongo installiert (pip install pymongo)
  • Eine laufende MongoDB-Instanz — entweder MongoDB Atlas (Cloud) oder ein lokaler Server, der mit mongod gestartet 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 database

Um 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: customers

create_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_logs

Wichtige Regeln für Capped Collections:

  • size ist obligatorisch, wenn capped=True; max ist 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: orders

Wenn 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

SituationEmpfohlener Ansatz
Sie benötigen eine begrenzte Größe, einen Validator oder eine benutzerdefinierte Sortierungcreate_collection() mit Optionen
Sie möchten sicherstellen, dass die Collection vor dem Schreiben existiertcreate_collection() + CollectionInvalid-Absicherung
Sie brauchen nur schnell einen Ort zum Speichern von DokumentenImplizit — ein Dokument einfügen und MongoDB die Collection erstellen lassen
Sie möchten die Existenz prüfen, ohne zu erstellenlist_collection_names()

Nächste Schritte

Jetzt, da Sie eine Collection haben, können Sie mit Dokumenten arbeiten:

Was this page helpful?