Start · Sprachen · PHP · Referenz · mysql_xdevapi\CollectionRemove

mysql_xdevapi\CollectionRemove

Klasse

Repräsentiert eine Remove-Operation auf einer <code>Collection</code> im MySQL X DevAPI und ermöglicht das gezielte Löschen von Dokumenten.

seit PHP 8.0.11 Kategorie: db

Signatur

class CollectionRemove

Beschreibung

CollectionRemove ist Teil des mysql_xdevapi-Erweiterungspakets und dient dazu, Dokumente aus einer NoSQL-Collection in MySQL 8+ zu entfernen. Das Objekt wird in der Regel nicht direkt instanziiert, sondern über die Methode Collection::remove() erzeugt, die eine Bedingung (Suchkriterium) entgegennimmt.

Das Objekt folgt einem Fluent Interface-Muster: Methoden wie sort(), limit() und bind() können verkettet aufgerufen werden, bevor die Operation mit execute() abgeschickt wird. Erst der Aufruf von execute() sendet die tatsächliche Löschanfrage an den MySQL-Server.

Typische Einsatzszenarien sind das Löschen einzelner Dokumente anhand ihrer ID, das Entfernen einer bestimmten Anzahl von Dokumenten nach einem Sortierkriterium oder das vollständige Leeren einer Collection bei Verwendung von true als Bedingung.

Achtung: Wird eine leere oder allzu weite Bedingung übergeben, können unbeabsichtigt viele oder alle Dokumente gelöscht werden. Daher sollte die Bedingung stets sorgfältig formuliert und mit bind() parametrisiert werden, um Injection-Risiken zu minimieren.

Beispiele

Einzelnes Dokument per ID aus einer Collection entfernen

<?php
$session = mysql_xdevapi\getSession('mysqlx://user:password@localhost');
$schema = $session->getSchema('meineDatenbank');
$collection = $schema->getCollection('benutzer');

// Dokument mit einer bestimmten ID entfernen
$result = $collection
    ->remove('_id = :id')
    ->bind(['id' => '0001'])
    ->execute();

echo 'Entfernte Dokumente: ' . $result->getAffectedItemsCount();
Entfernte Dokumente: 1

Die ältesten 5 inaktiven Benutzer löschen (sortiert und limitiert)

<?php
$session = mysql_xdevapi\getSession('mysqlx://user:password@localhost');
$schema = $session->getSchema('meineDatenbank');
$collection = $schema->getCollection('benutzer');

// Die 5 inaktivsten Benutzer (sortiert nach letztem Login) entfernen
$result = $collection
    ->remove('aktiv = false')
    ->sort('letzterLogin ASC')
    ->limit(5)
    ->execute();

echo 'Entfernte Dokumente: ' . $result->getAffectedItemsCount();
Entfernte Dokumente: 5

// Wichtig · Fallstricke

Sicherheitshinweis: Übergib niemals unkontrollierte Benutzereingaben direkt als Bedingungsstring. Nutze stets Platzhalter wie :name in Verbindung mit bind(), um Parameter-Injection zu verhindern.

Das Aufrufen von remove('true') oder remove('1=1') ohne limit() löscht alle Dokumente der Collection — äquivalent zu einem Truncate. In MySQL X DevAPI wird eine leere Bedingung ('') typischerweise abgelehnt; man muss explizit 'true' angeben, um alle Dokumente zu löschen.

Die Klasse selbst ist nicht direkt instantiierbar; sie wird ausschließlich über Collection::remove() erzeugt.