Signatur
Beschreibung
Die Klasse mysql_xdevapi\Collection ist das zentrale Objekt für die dokumentenorientierte Arbeit mit MySQL über das X DevAPI-Protokoll. Eine Collection ist eine benannte Sammlung von JSON-Dokumenten innerhalb eines Schema-Objekts und entspricht konzeptuell einer NoSQL-Dokumentenkollektion, wie man sie aus MongoDB o. Ä. kennt.
Im Gegensatz zu klassischen relationalen Tabellen speichert eine Collection strukturierte JSON-Dokumente, die kein festes Schema erfordern. Jedes Dokument erhält automatisch ein eindeutiges _id-Feld, sofern keines angegeben wird. Der Zugriff erfolgt über eine DSN-Verbindung mit dem mysqlx://-Schema, nicht über die klassischen mysqli- oder PDO_mysql-Treiber.
Die Klasse bietet eine Fluent-Interface-orientierte API: Methoden wie add(), find(), modify() und remove() geben jeweils ein Statement-Objekt zurück, das über execute() ausgeführt wird. Dadurch lassen sich komplexe Abfragen mit Filtern, Sortierungen und Limitierungen verketten.
Der Einsatz empfiehlt sich immer dann, wenn flexible, schemalose Dokumentenstrukturen in MySQL gespeichert werden sollen, ohne auf externe NoSQL-Datenbanken ausweichen zu müssen, oder wenn vorhandene MySQL-Infrastruktur genutzt werden soll.
Beispiele
Dokumente hinzufügen und abrufen
<?php
// Verbindung über X DevAPI herstellen
$session = mysql_xdevapi\getSession('mysqlx://root:geheim@localhost');
// Schema und Collection auswählen bzw. erstellen
$schema = $session->getSchema('meine_datenbank');
$collection = $schema->createCollection('benutzer');
// Dokumente hinzufügen
$collection->add([
['name' => 'Alice', 'alter' => 30, 'aktiv' => true],
['name' => 'Bob', 'alter' => 25, 'aktiv' => false],
])->execute();
// Alle aktiven Benutzer abrufen
$result = $collection
->find('aktiv = true')
->sort('alter DESC')
->execute();
foreach ($result->fetchAll() as $doc) {
echo $doc['name'] . ' (' . $doc['alter'] . ')' . PHP_EOL;
}
// Ausgabe: Alice (30)
Dokument ändern und löschen
<?php
$session = mysql_xdevapi\getSession('mysqlx://root:geheim@localhost');
$collection = $session->getSchema('meine_datenbank')->getCollection('benutzer');
// Alter von Alice auf 31 setzen
$collection
->modify('name = :name')
->set('alter', 31)
->bind(['name' => 'Alice'])
->execute();
// Inaktive Benutzer löschen
$collection
->remove('aktiv = false')
->execute();
// Anzahl verbleibender Dokumente prüfen
$anzahl = $collection->count();
echo 'Verbleibende Dokumente: ' . $anzahl . PHP_EOL;
// Wichtig · Fallstricke
Voraussetzungen: Die Erweiterung mysql_xdevapi muss installiert und aktiviert sein (PECL-Paket). MySQL Server 5.7.12+ oder 8.0+ mit aktiviertem X Plugin (mysqlx_port, Standard 33060) ist erforderlich.
Sicherheit: Verwende beim Filtern stets parametrisierte Bindings via bind() statt direkte String-Interpolation in Filterausdrücken, um Injection-Angriffe zu vermeiden.
_id-Felder: Jedes Dokument erhält beim Einfügen automatisch ein _id-Feld, falls keines angegeben wird. Dieses ist unveränderlich und dient als Primärschlüssel.
Stabilität: Die mysql_xdevapi-Erweiterung gilt als experimentell; API-Änderungen zwischen Versionen sind möglich. Für produktionskritische Anwendungen sollte die Stabilität der eingesetzten Version geprüft werden.