Signatur
Beschreibung
Die Klasse MongoDB\Driver\Command kapselt ein MongoDB-Befehlsdokument, das über einen MongoDB\Driver\Manager an den Server geschickt werden kann. MongoDB-Befehle sind administrative oder query-artige Operationen, die nicht über das normale CRUD-Interface abgebildet werden – z. B. ping, createCollection, aggregate oder buildInfo.
Ein Command-Objekt wird in der Regel zusammen mit MongoDB\Driver\Manager::executeCommand() verwendet. Das eigentliche Befehlsdokument wird als Array oder stdClass-Objekt übergeben; der erste Schlüssel des Dokuments muss dabei der Name des Befehls sein.
Über den optionalen zweiten Parameter commandOptions können Verhaltensoptionen wie ein maxAwaitTimeMS-Limit gesetzt werden. Diese Optionen betreffen ausschließlich die Treiber-interne Behandlung des Befehls, nicht das Befehlsdokument selbst.
Da Command nur ein Wertobjekt (Value Object) ist, enthält es keine eigene Ausführungslogik. Es wird ausschließlich als Eingabe für die executeCommand-Familie von Methoden des Managers verwendet.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $document Pflicht | array|object | Das MongoDB-Befehlsdokument als assoziatives Array oder Objekt. Der erste Schlüssel muss der Befehlsname sein (z. B. ['ping' => 1]). |
|
| $commandOptions | array | [] | Optionale Treiber-Optionen. Unterstützt derzeit maxAwaitTimeMS (int) für tailable Cursor-Befehle. |
Beispiele
Verbindungstest mit dem ping-Befehl
<?php
$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
$command = new MongoDB\Driver\Command(['ping' => 1]);
try {
$cursor = $manager->executeCommand('admin', $command);
$result = current($cursor->toArray());
echo 'MongoDB antwortet: ok = ' . $result->ok . PHP_EOL;
} catch (MongoDB\Driver\Exception\Exception $e) {
echo 'Fehler: ' . $e->getMessage() . PHP_EOL;
}
Serverinformationen mit buildInfo abrufen
<?php
$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
$command = new MongoDB\Driver\Command(['buildInfo' => 1]);
$cursor = $manager->executeCommand('admin', $command);
$info = current($cursor->toArray());
echo 'MongoDB Version: ' . $info->version . PHP_EOL;
echo 'GitVersion: ' . $info->gitVersion . PHP_EOL;
Collection erstellen mit createCollection
<?php
$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
$command = new MongoDB\Driver\Command([
'create' => 'meine_sammlung',
'capped' => true,
'size' => 1048576, // 1 MB
'max' => 1000,
]);
$cursor = $manager->executeCommand('meine_datenbank', $command);
$result = current($cursor->toArray());
if ($result->ok == 1) {
echo 'Collection erfolgreich erstellt.' . PHP_EOL;
}
// Wichtig · Fallstricke
Reihenfolge der Schlüssel: MongoDB ist in manchen Befehlen sensibel gegenüber der Schlüsselreihenfolge. Bei PHP-Arrays (array) ist die Reihenfolge garantiert; bei stdClass-Objekten ebenfalls. Verwende keine sortierten assoziativen Arrays, wenn der Befehlsname nicht an erster Stelle steht.
Sicherheit: Befehlsdokumente, die Benutzereingaben enthalten, müssen sorgfältig validiert werden. Obwohl MongoDB keine klassische SQL-Injection kennt, sind Operator-Injection-Angriffe (z. B. via $where) möglich. Nutze typsichere Eingabevalidierung und vermeide die direkte Übernahme von Nutzerstrings als Befehlsschlüssel.
Befehlsberechtigung: Viele administrative Befehle (z. B. shutdown, createUser) erfordern entsprechende Datenbankrollen. Stelle sicher, dass der verbundene Benutzer die notwendigen Privilegien besitzt.
Diese Klasse ist final und kann nicht erweitert werden.