Start · Sprachen · PHP · Referenz · MongoDB\Driver\Command

MongoDB\Driver\Command

Klasse

Repräsentiert einen an einen MongoDB-Server zu sendenden Befehl (Command Document).

seit PHP 1.0.0 Kategorie: db

Signatur

class MongoDB\Driver\Command

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;
}
MongoDB antwortet: ok = 1

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;
MongoDB Version: 7.0.5 GitVersion: abc123...

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;
}
Collection erfolgreich erstellt.

// 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.