1. Verbindung zur MongoDB herstellen
Grundlegende Verbindung
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
echo "Verbindung erfolgreich!" ;
?>
Dies ist die Standard-Verbindung zu MongoDB. Der Autoloader wird benötigt, um die MongoDB-Library zu laden.
Datenbank und Collection auswählen
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$database = $client ->schule;
$collection = $database ->schueler;
echo "Database: schule, Collection: schueler" ;
?>
Collections sind wie Tabellen in SQL. Sie werden automatisch erstellt, wenn du das erste Dokument einfügst.
2. Create - Dokumente einfügen
Ein Dokument einfügen
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$dokument = [
"name" => "Anna Müller" ,
"alter" => 15 ,
"klasse" => "9a" ,
"noten" => [2 , 1 , 3 , 2 ]
];
$result = $collection ->insertOne ($dokument );
echo "Dokument eingefügt mit ID: " . $result ->getInsertedId ();
?>
insertOne() fügt ein einzelnes Dokument ein. MongoDB erstellt automatisch eine eindeutige _id.
Mehrere Dokumente auf einmal einfügen
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$dokumente = [
["name" => "Max Weber" , "alter" => 16 , "klasse" => "10b" ],
["name" => "Lisa Schmidt" , "alter" => 15 , "klasse" => "9a" ],
["name" => "Tom Klein" , "alter" => 17 , "klasse" => "11c" ]
];
$result = $collection ->insertMany ($dokumente );
echo "Anzahl eingefügte Dokumente: " . $result ->getInsertedCount ();
?>
insertMany() ist effizienter, wenn du mehrere Dokumente gleichzeitig einfügen möchtest.
Dokument mit eigener ID einfügen
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$dokument = [
"_id" => 12345 ,
"name" => "Sophie Wagner" ,
"alter" => 16
];
$collection ->insertOne ($dokument );
echo "Dokument mit eigener ID eingefügt!" ;
?>
Du kannst auch eine eigene _id festlegen (muss aber eindeutig sein!).
3. Read - Dokumente anzeigen
Alle Dokumente anzeigen
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$dokumente = $collection ->find ();
foreach ($dokumente as $dok ) {
echo "Name: " . $dok ['name' ] . ", Alter: " . $dok ['alter' ] . "<br>" ;
}
?>
Name: Anna Müller, Alter: 15
Name: Max Weber, Alter: 16
Name: Lisa Schmidt, Alter: 15
find() ohne Parameter gibt alle Dokumente zurück. Das Ergebnis ist iterierbar (foreach).
Ein einzelnes Dokument finden
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$dokument = $collection ->findOne (["name" => "Anna Müller" ]);
if ($dokument ) {
echo "Gefunden: " . $dokument ['name' ] . ", Klasse: " . $dokument ['klasse' ];
}
?>
Gefunden: Anna Müller, Klasse: 9a
findOne() gibt nur das erste passende Dokument zurück (oder null, wenn nichts gefunden wurde).
Dokumente als Array konvertieren
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$dokumente = $collection ->find ()->toArray ();
echo "Anzahl Schüler: " . count ($dokumente );
print_r ($dokumente );
?>
Mit toArray() kannst du alle Ergebnisse auf einmal in ein PHP-Array umwandeln.
Anzahl Dokumente zählen
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$anzahl = $collection ->countDocuments ();
echo "Gesamt: " . $anzahl . " Schüler<br>" ;
$anzahl_9a = $collection ->countDocuments (["klasse" => "9a" ]);
echo "Klasse 9a: " . $anzahl_9a . " Schüler" ;
?>
Gesamt: 4 Schüler
Klasse 9a: 2 Schüler
countDocuments() zählt Dokumente, optional mit Filter.
4. Filter und Queries
Einfache Filter
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$dokumente = $collection ->find (["klasse" => "9a" ]);
foreach ($dokumente as $dok ) {
echo $dok ['name' ] . "<br>" ;
}
?>
Filter werden als assoziative Arrays übergeben. Alle Bedingungen müssen erfüllt sein (AND).
Vergleichsoperatoren ($gt, $lt, $gte, $lte)
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$dokumente = $collection ->find ([
"alter" => ['$gt' => 15 ]
]);
$dokumente2 = $collection ->find ([
"alter" => [
'$gte' => 15 ,
'$lte' => 17
]
]);
?>
$gt = greater than (grösser als), $gte = greater than or equal (grösser oder gleich), $lt = less than, $lte = less than or equal
IN-Operator für mehrere Werte
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$dokumente = $collection ->find ([
"klasse" => ['$in' => ["9a" , "10b" , "11c" ]]
]);
foreach ($dokumente as $dok ) {
echo $dok ['name' ] . " - " . $dok ['klasse' ] . "<br>" ;
}
?>
$in sucht nach Dokumenten, die einen der angegebenen Werte haben (wie SQL IN).
UND/ODER-Verknüpfungen ($and, $or)
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$dokumente = $collection ->find ([
'$or' => [
["klasse" => "9a" ],
["alter" => ['$gt' => 16 ]]
]
]);
$dokumente2 = $collection ->find ([
'$and' => [
["klasse" => "9a" ],
["alter" => ['$gt' => 14 ]]
]
]);
?>
Mit $or und $and kannst du komplexe Bedingungen erstellen.
Textsuche mit Regex
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$dokumente = $collection ->find ([
"name" => new MongoDB\BSON\Regex ("Anna" , "i" )
]);
foreach ($dokumente as $dok ) {
echo $dok ['name' ] . "<br>" ;
}
?>
Mit Regex kannst du Muster in Texten suchen. "i" bedeutet case-insensitive (Gross-/Kleinschreibung egal).
5. Update - Dokumente aktualisieren
Ein Dokument aktualisieren
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$result = $collection ->updateOne (
["name" => "Anna Müller" ],
['$set' => ["alter" => 16 ]]
);
echo "Aktualisiert: " . $result ->getModifiedCount () . " Dokument(e)" ;
?>
updateOne() aktualisiert das erste passende Dokument. $set setzt/aktualisiert Felder.
Mehrere Dokumente aktualisieren
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$result = $collection ->updateMany (
["klasse" => "9a" ],
['$set' => ["klasse" => "10a" ]]
);
echo "Aktualisiert: " . $result ->getModifiedCount () . " Dokument(e)" ;
?>
updateMany() aktualisiert alle passenden Dokumente.
Feld hinzufügen oder entfernen
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$collection ->updateOne (
["name" => "Anna Müller" ],
['$set' => ["email" => "anna@schule.de" ]]
);
$collection ->updateOne (
["name" => "Anna Müller" ],
['$unset' => ["email" => "" ]]
);
?>
$set fügt neue Felder hinzu, $unset entfernt Felder komplett.
Zahlen inkrementieren ($inc)
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$collection ->updateOne (
["name" => "Anna Müller" ],
['$inc' => ["alter" => 1 ]]
);
$collection ->updateOne (
["name" => "Tom Klein" ],
['$inc' => ["alter" => -2 ]]
);
?>
$inc erhöht/verringert Zahlenwerte ohne den aktuellen Wert auslesen zu müssen.
Arrays bearbeiten ($push, $pull)
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$collection ->updateOne (
["name" => "Anna Müller" ],
['$push' => ["noten" => 1 ]]
);
$collection ->updateOne (
["name" => "Anna Müller" ],
['$pull' => ["noten" => 3 ]]
);
?>
$push fügt Elemente zu Arrays hinzu, $pull entfernt sie.
Upsert - Update oder Insert
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$result = $collection ->updateOne (
["name" => "Sarah Becker" ],
['$set' => ["alter" => 15 , "klasse" => "9b" ]],
['upsert' => true ]
);
if ($result ->getUpsertedCount () > 0 ) {
echo "Neues Dokument eingefügt!" ;
}
?>
Mit upsert=true wird ein Dokument eingefügt, wenn es nicht existiert. Sehr praktisch!
6. Delete - Dokumente löschen
Ein Dokument löschen
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$result = $collection ->deleteOne (["name" => "Anna Müller" ]);
echo "Gelöscht: " . $result ->getDeletedCount () . " Dokument(e)" ;
?>
deleteOne() löscht das erste passende Dokument.
Mehrere Dokumente löschen
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$result = $collection ->deleteMany (["klasse" => "9a" ]);
echo "Gelöscht: " . $result ->getDeletedCount () . " Dokument(e)" ;
?>
deleteMany() löscht alle passenden Dokumente.
Alle Dokumente aus Collection löschen
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$result = $collection ->deleteMany ([]);
echo "Alle Dokumente gelöscht: " . $result ->getDeletedCount ();
?>
⚠️ VORSICHT: Ein leeres Array [] als Filter löscht ALLE Dokumente in der Collection!
Collection komplett löschen (DROP)
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$collection ->drop ();
echo "Collection 'schueler' wurde komplett gelöscht!" ;
?>
⚠️ drop() löscht die gesamte Collection mit allen Dokumenten und Indizes!
7. Sortierung
Aufsteigend sortieren
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$dokumente = $collection ->find (
[],
['sort' => ['alter' => 1 ]]
);
foreach ($dokumente as $dok ) {
echo $dok ['name' ] . " - " . $dok ['alter' ] . "<br>" ;
}
?>
1 = aufsteigend (ascending), von klein nach gross
Absteigend sortieren
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$dokumente = $collection ->find (
[],
['sort' => ['alter' => -1 ]]
);
foreach ($dokumente as $dok ) {
echo $dok ['name' ] . " - " . $dok ['alter' ] . "<br>" ;
}
?>
-1 = absteigend (descending), von gross nach klein
Nach mehreren Feldern sortieren
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$dokumente = $collection ->find (
[],
['sort' => [
'klasse' => 1 ,
'name' => 1
]]
);
?>
Du kannst nach mehreren Feldern sortieren. Die Reihenfolge im Array bestimmt die Priorität.
8. Limit und Skip (Pagination)
Anzahl begrenzen (Limit)
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$dokumente = $collection ->find (
[],
['limit' => 3 ]
);
foreach ($dokumente as $dok ) {
echo $dok ['name' ] . "<br>" ;
}
?>
limit begrenzt die Anzahl der zurückgegebenen Dokumente.
Dokumente überspringen (Skip)
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$dokumente = $collection ->find (
[],
['skip' => 2 ]
);
foreach ($dokumente as $dok ) {
echo $dok ['name' ] . "<br>" ;
}
?>
skip überspringt die angegebene Anzahl von Dokumenten am Anfang.
Pagination (Seiten blättern)
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$seite = 2 ;
$pro_seite = 5 ;
$skip = ($seite - 1 ) * $pro_seite ;
$dokumente = $collection ->find (
[],
[
'skip' => $skip ,
'limit' => $pro_seite ,
'sort' => ['name' => 1 ]
]
);
foreach ($dokumente as $dok ) {
echo $dok ['name' ] . "<br>" ;
}
?>
Kombiniere skip und limit für Pagination. Vergiss nicht zu sortieren für konsistente Ergebnisse!
9. Felder auswählen (Projection)
Nur bestimmte Felder zurückgeben
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$dokumente = $collection ->find (
[],
['projection' => [
'name' => 1 ,
'klasse' => 1 ,
'_id' => 0
]]
);
foreach ($dokumente as $dok ) {
print_r ($dok );
}
?>
1 = Feld einschliessen, 0 = Feld ausschliessen. Die _id ist standardmässig dabei, ausser du schliesst sie explizit aus.
Felder ausschliessen
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$dokumente = $collection ->find (
[],
['projection' => [
'noten' => 0
]]
);
?>
Du kannst entweder Felder ein- ODER ausschliessen (nicht mischen, ausser bei _id).
10. Aggregation Pipeline
Einfache Gruppierung
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$result = $collection ->aggregate ([
['$group' => [
'_id' => '$klasse' ,
'anzahl' => ['$sum' => 1 ]
]]
]);
foreach ($result as $doc ) {
echo "Klasse " . $doc ['_id' ] . ": " . $doc ['anzahl' ] . " Schüler<br>" ;
}
?>
Aggregation ist mächtig für Berechnungen und Gruppierungen. $group fasst Dokumente zusammen.
Durchschnitt berechnen
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$result = $collection ->aggregate ([
['$group' => [
'_id' => '$klasse' ,
'durchschnittsalter' => ['$avg' => '$alter' ]
]]
]);
foreach ($result as $doc ) {
echo "Klasse " . $doc ['_id' ] . ": Ø " .
round ($doc ['durchschnittsalter' ], 1 ) . " Jahre<br>" ;
}
?>
$avg berechnet den Durchschnitt eines Feldes.
Match und Sort in Pipeline
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$result = $collection ->aggregate ([
['$match' => ['alter' => ['$gt' => 15 ]]],
['$group' => [
'_id' => '$klasse' ,
'anzahl' => ['$sum' => 1 ]
]],
['$sort' => ['anzahl' => -1 ]]
]);
?>
Die Pipeline durchläuft mehrere Stufen: $match filtert, $group gruppiert, $sort sortiert.
11. Indexe für Performance
Einfachen Index erstellen
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$collection ->createIndex (['name' => 1 ]);
echo "Index auf 'name' erstellt!" ;
?>
Indexe beschleunigen Abfragen erheblich, besonders bei grossen Collections!
Zusammengesetzten Index erstellen
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$collection ->createIndex ([
'klasse' => 1 ,
'alter' => -1
]);
echo "Zusammengesetzter Index erstellt!" ;
?>
Zusammengesetzte Indexe sind nützlich für Queries auf mehreren Feldern.
Alle Indexe anzeigen
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
foreach ($collection ->listIndexes () as $index ) {
print_r ($index );
}
?>
Mit listIndexes() siehst du alle vorhandenen Indexe.
Index löschen
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$collection ->dropIndex ('name_1' );
echo "Index gelöscht!" ;
?>
Der Index-Name ist normalerweise feldname_1 oder feldname_-1.
12. Fehlerbehandlung
Try-Catch für Verbindungsfehler
Kopieren
<?php
require 'vendor/autoload.php' ;
try {
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$client ->listDatabases ();
echo "Verbindung erfolgreich!" ;
} catch (MongoDB\Driver\Exception\Exception $e ) {
echo "Fehler: " . $e ->getMessage ();
}
?>
Fange immer Exceptions ab, um saubere Fehlerbehandlung zu haben!
Fehlerbehandlung bei Operationen
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
try {
$collection ->insertOne ([
"_id" => 1 ,
"name" => "Test"
]);
echo "Dokument eingefügt!" ;
} catch (MongoDB\Driver\Exception\BulkWriteException $e ) {
echo "Fehler beim Einfügen: " . $e ->getMessage ();
}
?>
BulkWriteException wird bei Insert/Update/Delete-Fehlern geworfen.
13. Vollständiges CRUD-Beispiel mit GUI
HTML-Formular zum Einfügen
Kopieren
<!DOCTYPE html>
< html>
< body>
< h2> Neuen Schüler hinzufügen< /h2>
< form method= "POST" action= "einfuegen.php" >
Name: < input type= "text" name= "name" required>< br>
Alter: < input type= "number" name= "alter" required>< br>
Klasse: < input type= "text" name= "klasse" required>< br>
< button type= "submit" > Hinzufügen< /button>
< /form>
< /body>
< /html>
PHP-Script zum Verarbeiten (einfuegen.php)
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
if ($_SERVER ['REQUEST_METHOD' ] == 'POST' ) {
$dokument = [
"name" => $_POST ['name' ],
"alter" => (int )$_POST ['alter' ],
"klasse" => $_POST ['klasse' ]
];
$collection ->insertOne ($dokument );
echo "Schüler erfolgreich hinzugefügt!" ;
echo "<br><a href='anzeigen.php'>Alle anzeigen</a>" ;
}
?>
Alle Dokumente mit HTML-Tabelle anzeigen (anzeigen.php)
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
$dokumente = $collection ->find ();
?>
< h2> Alle Schüler< /h2>
< table border= "1" >
< tr>
< th> Name< /th>
< th> Alter< /th>
< th> Klasse< /th>
< th> Aktionen< /th>
< /tr>
<?php foreach ($dokumente as $dok ): ?>
< tr>
< td> <? = $dok ['name' ] ?> < /td>
< td> <? = $dok ['alter' ] ?> < /td>
< td> <? = $dok ['klasse' ] ?> < /td>
< td>
< a href= "loeschen.php?id=<?= $dok['_id'] ?>" > Löschen< /a>
< /td>
< /tr>
<?php endforeach ; ?>
< /table>
Dies ist ein einfaches Beispiel einer HTML-Tabelle mit allen Schülern und Lösch-Link.
Dokument löschen (loeschen.php)
Kopieren
<?php
require 'vendor/autoload.php' ;
$client = new MongoDB\Client ("mongodb://localhost:27017" );
$collection = $client ->schule->schueler;
if (isset ($_GET ['id' ])) {
$id = new MongoDB\BSON\ObjectId ($_GET ['id' ]);
$collection ->deleteOne (['_id' => $id ]);
echo "Schüler gelöscht!" ;
echo "<br><a href='anzeigen.php'>Zurück zur Liste</a>" ;
}
?>
Wichtig: Die _id muss als ObjectId-Objekt konvertiert werden!
14. Tipps und Best Practices
✅ Wichtige Tipps
1. Verbindung wiederverwenden: Erstelle die $client-Verbindung nur einmal und verwende sie mehrfach.
2. Indexe nutzen: Erstelle Indexe auf häufig gesuchten Feldern für bessere Performance.
3. Projection verwenden: Hole nur die Felder, die du wirklich brauchst.
4. Try-Catch benutzen: Fange immer Exceptions ab für saubere Fehlerbehandlung.
5. ObjectId konvertieren: Wenn du mit _id arbeitest, konvertiere Strings zu ObjectId.
6. Prepared Updates: Nutze $set, $inc, etc. statt das ganze Dokument zu ersetzen.
7. Validierung: Validiere User-Input bevor du ihn in MongoDB speicherst.
8. Limit nutzen: Verwende limit() bei grossen Datenmengen, um Speicher zu sparen.
❌ Häufige Fehler vermeiden
Fehler 1: vendor/autoload.php vergessen → Lösung: Immer require 'vendor/autoload.php'; am Anfang
Fehler 2: _id als String übergeben → Lösung: new MongoDB\BSON\ObjectId($id)
Fehler 3: Kein try-catch → Lösung: Immer Exceptions abfangen
Fehler 4: Dokument ohne $set updaten → Lösung: Immer ['$set' => [...]] verwenden
Fehler 5: Keine Indexe → Lösung: Indexe auf oft gesuchte Felder erstellen