MongoDB CRUD

6 Kernkonzepte
Die wichtigsten CRUD-Operationen in MongoDB: insertOne · insertMany · find · findOne · updateOne · updateMany · deleteOne · deleteMany MongoDB ist eine dokumentenorientierte NoSQL-Datenbank. Diese Befehle sind die Grundlage für jede Anwendung, die Daten in MongoDB speichert, abfragt, aktualisiert oder löscht.

INSERT – Dokumente einfügen

insertOne · insertMany
// Ein einzelnes Dokument db.kunden.insertOne({ name: "Max Mustermann", email: "max@example.com" }) // Mehrere Dokumente db.kunden.insertMany([ { name: "Anna Schmidt", email: "anna@example.com" }, { name: "Ben Weber", email: "ben@example.com" } ])

insertOne fügt ein einzelnes Dokument in eine Collection ein. insertMany fügt mehrere Dokumente auf einmal ein. Jedes Dokument erhält automatisch ein eindeutiges _id-Feld.

Beispiele
// Einfaches Dokument einfügen
db.produkte.insertOne({
name: "Laptop",
preis: 999.99,
kategorie: "Elektronik",
bestand: 10
})
// Mehrere Dokumente einfügen
db.produkte.insertMany([
{ name: "Smartphone", preis: 599.99, kategorie: "Elektronik" },
{ name: "Kopfhörer", preis: 89.99, kategorie: "Elektronik" }
])
// Mit eigener _id
db.produkte.insertOne({
_id: "p001",
name: "Tastatur",
preis: 49.99
})
Typische Ausgabe (insertOne):
{ acknowledged: true, insertedId: ObjectId("507f191e810c19729de860ea") }
Tipp: MongoDB generiert automatisch eine _id vom Typ ObjectId. Sie können aber auch eigene IDs vergeben, wenn Sie diese selbst verwalten möchten.

FIND – Dokumente abfragen

find · findOne · pretty()
// Alle Dokumente db.produkte.find() // Mit Filter db.produkte.find({ kategorie: "Elektronik" }) // Nur ein Dokument db.produkte.findOne({ name: "Laptop" })

find gibt einen Cursor auf alle passenden Dokumente zurück. findOne gibt nur das erste passende Dokument zurück. Mit pretty() wird die Ausgabe formatiert.

Häufige Query-Operatoren

Operator Beschreibung Beispiel
{ $eq: value } Gleich (Standard) { preis: { $eq: 100 } }
{ $gt: value } Größer als { preis: { $gt: 100 } }
{ $gte: value } Größer oder gleich { preis: { $gte: 100 } }
{ $lt: value } Kleiner als { preis: { $lt: 100 } }
{ $lte: value } Kleiner oder gleich { preis: { $lte: 100 } }
{ $in: [value1, value2] } In einer Liste { kategorie: { $in: ["Elektronik", "Bücher"] } }
{ $regex: /muster/ } Regulärer Ausdruck { name: { $regex: /book/i } }
{ $exists: true } Feld existiert { rabatt: { $exists: true } }
{ $and: [b1, b2] } Logisches UND { $and: [ { preis: { $gt: 50 } }, { kategorie: "Elektronik" } ] }
{ $or: [b1, b2] } Logisches ODER { $or: [ { preis: { $lt: 10 } }, { preis: { $gt: 100 } } ] }
Beispiele
// Alle Produkte
db.produkte.find().pretty()
// Produkte mit Preis > 100
db.produkte.find({ preis: { $gt: 100 } })
// Projektion (nur bestimmte Felder)
db.produkte.find(
{ kategorie: "Elektronik" },
{ name: 1, preis: 1, _id: 0 }
)
// Sortierung, Limit und Skip
db.produkte.find()
.sort({ preis: -1 })
.limit(5)
.skip(10)
Tipp: find() gibt einen Cursor zurück. Mit .toArray() können Sie das Ergebnis als Array erhalten (im Node.js-Treiber). In der Mongo-Shell wird der Cursor automatisch iteriert.

UPDATE – Dokumente aktualisieren

updateOne · updateMany · $set · $inc · $push
// Ein Dokument aktualisieren db.produkte.updateOne( { name: "Laptop" }, { $set: { preis: 899.99 } } )

updateOne aktualisiert das erste passende Dokument. updateMany aktualisiert alle passenden Dokumente. Mit Update-Operatoren wie $set, $inc oder $push steuern Sie die Änderungen.

Wichtige Update-Operatoren

Operator Beschreibung Beispiel
$set Feld setzen oder überschreiben { $set: { preis: 899.99 } }
$inc Zahl um Wert erhöhen { $inc: { bestand: -1 } }
$push Element zu Array hinzufügen { $push: { tags: "neu" } }
$pull Element aus Array entfernen { $pull: { tags: "alt" } }
$unset Feld entfernen { $unset: { rabatt: "" } }
$rename Feld umbenennen { $rename: { "name": "produktname" } }
$currentDate Auf aktuelles Datum setzen { $currentDate: { letzte_aenderung: true } }
$addToSet Element zu Array hinzufügen, wenn nicht vorhanden { $addToSet: { kategorien: "Neu" } }
Beispiele
// Einzelnes Feld aktualisieren
db.produkte.updateOne(
{ _id: ObjectId("...") },
{ $set: { preis: 1299.99 } }
)
// Bestand verringern (Inkrement)
db.produkte.updateOne(
{ name: "Laptop" },
{ $inc: { bestand: -1 } }
)
// Array erweitern
db.produkte.updateOne(
{ name: "Smartphone" },
{ $push: { bewertungen: { user: "Anna", sterne: 5 } } }
)
// Mehrere Felder gleichzeitig
db.produkte.updateMany(
{ kategorie: "Elektronik" },
{ $set: { rabatt: 10 }, $inc: { preis: 5.99 } }
)
Tipp: Vergessen Sie nie den Filter bei updateMany – ohne Filter werden alle Dokumente in der Collection aktualisiert! Verwenden Sie upsert: true, um ein Dokument zu erstellen, falls es nicht existiert.

DELETE – Dokumente löschen

deleteOne · deleteMany
// Ein Dokument löschen db.produkte.deleteOne({ name: "Tastatur" }) // Alle Dokumente löschen db.produkte.deleteMany({ kategorie: "Auslauf" })

deleteOne löscht das erste passende Dokument. deleteMany löscht alle passenden Dokumente. Ohne Filter werden alle Dokumente der Collection gelöscht.

Beispiele
// Ein Dokument anhand der ID löschen
db.produkte.deleteOne({ _id: ObjectId("507f191e810c19729de860ea") })
// Alle Dokumente einer Kategorie löschen
db.produkte.deleteMany({ kategorie: "Auslauf" })
// Alle Dokumente löschen (Vorsicht!)
db.produkte.deleteMany({})
// Collection leeren (schneller)
db.produkte.drop()
Typische Ausgabe (deleteOne):
{ acknowledged: true, deletedCount: 1 }
⚠️ Warnung: deleteMany({}) löscht alle Dokumente einer Collection. Verwenden Sie drop() für das vollständige Leeren einer Collection – es ist schneller, entfernt aber auch Indizes.

Bulk-Operationen – Mehrere Befehle auf einmal

bulkWrite · ordered · unordered
// Bulk-Write mit mehreren Operationen db.produkte.bulkWrite([ { insertOne: { document: { name: "Monitor", preis: 299.99 } } }, { updateOne: { filter: { name: "Laptop" }, update: { $set: { preis: 999.99 } } } }, { deleteOne: { filter: { name: "Tastatur" } } } ])

Bulk-Operationen führen mehrere Schreiboperationen in einem einzigen Befehl aus. Sie sind deutlich effizienter als einzelne Befehle und können ordered (stoppt bei Fehler) oder unordered (parallel, setzt bei Fehlern fort) sein.

Beispiele
// Ordered Bulk Write (Standard)
db.produkte.bulkWrite([
{ insertOne: { document: { name: "Maus", preis: 29.99 } } },
{ updateMany: { filter: { kategorie: "Elektronik" }, update: { $inc: { preis: 10 } } } },
{ deleteMany: { filter: { bestand: { $lt: 1 } } } }
])
// Unordered Bulk Write (fehlertoleranter)
db.produkte.bulkWrite(
[ /* Operationen */ ],
{ ordered: false }
)
Typische Ausgabe (bulkWrite):
{ acknowledged: true, insertedCount: 1, matchedCount: 1, modifiedCount: 1, deletedCount: 5 }
Tipp: Bulk-Operationen sind besonders nützlich für Migrationen, Batch-Imports und regelmäßige Updates in großen Collections. Sie reduzieren die Anzahl der Netzwerk-Roundtrips erheblich.

Optionen & Modifikatoren – Feinabstimmung

upsert · projection · sort · hint
// updateOne mit upsert db.produkte.updateOne( { name: "Neues Produkt" }, { $set: { preis: 199.99, kategorie: "Neu" } }, { upsert: true } )

Optionen geben Ihnen die Kontrolle über das Verhalten von CRUD-Operationen – z.B. upsert (erstellt Dokument, falls nicht vorhanden), projection (welche Felder zurückgegeben werden) oder sort (für findOne).

Wichtige Optionen

Option Beschreibung Verwendung
upsert: true Erstellt Dokument, falls kein Match updateOne / updateMany
projection Welche Felder zurückgegeben werden find / findOne
sort Sortierung für findOne / updateOne findOne / updateOne
hint Index erzwingen für Query find / findOne
allowDiskUse Erlaubt Plattennutzung für große Sortierungen find (Aggregation)
Beispiele
// Upsert: Dokument einfügen oder aktualisieren
db.produkte.updateOne(
{ name: "Tablet" },
{ $set: { preis: 399.99, kategorie: "Elektronik" } },
{ upsert: true }
)
// findOne mit Sortierung und Projektion
db.produkte.findOne(
{ kategorie: "Elektronik" },
{ sort: { preis: -1 }, projection: { name: 1, preis: 1 } }
)
// find mit Hint (Index erzwingen)
db.produkte.find(
{ kategorie: "Elektronik" }
).hint({ kategorie: 1 })
Tipp: Mit upsert: true können Sie elegante "Find or Create"-Logik implementieren. Die Kombination mit $setOnInsert erlaubt es, nur beim Erstellen bestimmte Felder zu setzen.

MongoDB CRUD im Überblick

insertOne Ein Dokument einfügen
Automatische _id
insertMany Mehrere Dokumente einfügen
Array von Dokumenten
find Dokumente abfragen
Cursor, Filter, Projektion
updateOne Ein Dokument aktualisieren
$set, $inc, $push
deleteOne Ein Dokument löschen
Erstes passendes
bulkWrite Mehrere Operationen
Batch-Verarbeitung

Quick Summary

insertOne
Einfügen
find
Abfragen
updateOne
Aktualisieren
deleteOne
Löschen
bulkWrite
Batch
upsert
Optionen
db.collection.insertOne({ name: "Test" }) · db.collection.find({ preis: { $gt: 100 } }) · db.collection.updateOne({ name: "Test" }, { $set: { preis: 200 } })