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

MongoDB\Driver\Query

Klasse

Repräsentiert eine an einen MongoDB-Server zu sendende Abfrage und kapselt Filter sowie Abfrageoptionen.

seit PHP 1.0.0 Kategorie: db

Signatur

class MongoDB\Driver\Query

Beschreibung

Die Klasse MongoDB\Driver\Query gehört zur offiziellen MongoDB-PHP-Erweiterung (ext-mongodb) und dient dazu, eine Abfrage gegen eine MongoDB-Kollektion zu definieren. Dabei werden Filterbedingungen (analog zu einem WHERE-Ausdruck in SQL) zusammen mit optionalen Abfrageeinstellungen wie Projektion, Sortierung, Limit und Skip in einem Objekt gebündelt.

Ein Query-Objekt wird anschließend an MongoDB\Driver\Manager::executeQuery() übergeben, welche die Abfrage auf dem Server ausführt und ein MongoDB\Driver\Cursor-Objekt zurückliefert, über das die Ergebnisdokumente iteriert werden können. Die Klasse selbst führt keine Verbindung zum Server auf – sie ist ein reines Wert-Objekt.

Der Filter-Parameter akzeptiert ein assoziatives Array oder ein Objekt, das MongoDB-Abfrageoperatoren wie $eq, $gt, $in usw. enthalten kann. Über den queryOptions-Parameter lassen sich u. a. Projektion (projection), Sortierung (sort), limit, skip, batchSize und weitere Cursor-Optionen steuern.

Die Klasse kann nicht erweitert werden (sie ist final). Für komplexere Anforderungen — etwa Aggregation Pipelines — stehen andere Klassen wie MongoDB\Driver\Command bereit.

Parameter

Name Typ Default Beschreibung
$filter Pflicht array|object Der Abfragefilter als assoziatives Array oder Objekt. Kann MongoDB-Abfrageoperatoren wie $eq, $gt, $in, $regex usw. enthalten. Ein leeres Array [] entspricht keinem Filter (alle Dokumente).
$queryOptions array|null null Optionales assoziatives Array mit Abfrageoptionen. Häufig genutzte Schlüssel: projection (zurückzugebende Felder), sort (Sortierreihenfolge), limit (maximale Anzahl Dokumente), skip (zu überspringende Dokumente), batchSize, noCursorTimeout, readConcern und collation.

Beispiele

Einfache Abfrage mit Filter und Projektion

<?php

$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');

// Alle Benutzer, die älter als 18 Jahre sind
$filter = ['age' => ['$gt' => 18]];

$options = [
    'projection' => ['_id' => 0, 'name' => 1, 'age' => 1],
    'sort'       => ['age' => 1],  // aufsteigend nach Alter
    'limit'      => 10,
];

$query = new MongoDB\Driver\Query($filter, $options);

$cursor = $manager->executeQuery('mydb.users', $query);

foreach ($cursor as $document) {
    echo $document->name . ' (' . $document->age . ')' . PHP_EOL;
}
Anna (19) Bernd (22) Carla (25)

Abfrage mit Regex-Filter und Paginierung

<?php

$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');

// Produkte, deren Name mit "Laptop" beginnt, Seite 2 (je 5 Einträge)
$seite    = 2;
$proSeite = 5;

$filter = [
    'name'     => ['$regex' => '^Laptop', '$options' => 'i'],
    'inStock'  => true,
];

$options = [
    'sort'  => ['price' => -1],  // teuerste zuerst
    'skip'  => ($seite - 1) * $proSeite,
    'limit' => $proSeite,
];

$query  = new MongoDB\Driver\Query($filter, $options);
$cursor = $manager->executeQuery('shop.products', $query);

foreach ($cursor as $produkt) {
    printf("%-30s %6.2f EUR\n", $produkt->name, $produkt->price);
}
Laptop Pro 15 (Silber) 1299.00 EUR Laptop Air Ultra 999.00 EUR Laptop Business 14 849.00 EUR

// Wichtig · Fallstricke

Sicherheit: Da MongoDB-Abfragen keine klassische String-Interpolation verwenden, ist das Risiko einer Injection geringer als bei SQL. Dennoch sollten Benutzereingaben, die als Filterwerte dienen, stets validiert und typisiert werden — besonders bei verschachtelten Operatoren, da ein Angreifer sonst ggf. eigene Operatoren einschleusen kann (sog. Operator Injection). Verwende niemals unkontrolliert $_GET- oder $_POST-Daten direkt als Filter-Array.

Klasse ist final: MongoDB\Driver\Query kann nicht subklassiert werden. Für Aggregations-Pipelines nutze stattdessen MongoDB\Driver\Command mit dem aggregate-Befehl oder die High-Level-Bibliothek mongodb/mongodb.

ext-mongodb vs. mongo: Diese Klasse gehört zur neuen Erweiterung ext-mongodb. Die veraltete Erweiterung ext-mongo ist seit PHP 7 nicht mehr verfügbar und sollte nicht mehr verwendet werden.