Option # 1: Anwendung Seite Update
Die Der einfachste Ansatz bei der Verwendung von Doctrine ODM besteht darin, die Aktualisierung auf der Anwendungsseite durchzuführen. Sie holen also alle Objekte, die Sie aktualisieren möchten, nehmen die notwendigen Anpassungen vor und löschen sie.
$services = $dm->createQueryBuilder('MyBundle:MyService')
->getQuery()
->execute();
foreach ($services as $service) {
$service->setUpdatedAt($service->getCreatedAt());
}
$db->flush();
$services
stellt den Mongo Cursor, der die Dokumente holen, wie Sie durchlaufen. Sie können eagerCursor
auf true
setzen, wenn Sie alle Dokumente gleichzeitig aus der Sammlung abrufen möchten.
Option # 2: Datenbank Seite Update
Sie auch das Update direkt auf die Datenbank selbst durchführen kann. Dazu müssen Sie die Abfrage jedoch selbst erstellen, da der Abfrage-Generator diese Funktionalität nicht unterstützt.
// Get MongoDB instance from DocumentManager
$mongo = $dm->getDocumentDatabase('Fully/Qualified/Class/Name')
->getMongoDB();
// Iterate over the collection and update each document
$mongo->execute('
db.MyServiceCollection.find().forEach(function (item) {
db.MyServiceCollection.update(
{_id: item._id},
{$set: {updated_at: item.created_at}}
);
});
');
Die Funktion in forEach
verwendet wird, ist nur eine ganz normale JavaScript-Funktion, so dass Sie dort etwas mehr Logik einsetzen können, wenn Sie mehr Kontrolle über was müssen Sie aktualisieren.
vielleicht mit einem Aggregat ?? – Fran