オプション#1希望:アプリケーション側更新
をDoctrine ODMを使用する場合の最も簡単なアプローチは、アプリケーション側で更新を実行することです。したがって、更新したいオブジェクトをすべて取り出し、必要な調整を行い、それらをフラッシュします。
$services = $dm->createQueryBuilder('MyBundle:MyService')
->getQuery()
->execute();
foreach ($services as $service) {
$service->setUpdatedAt($service->getCreatedAt());
}
$db->flush();
$services
あなたが反復として文書をフェッチしますモンゴカーソルを表します。一度にコレクションからすべての文書をフェッチする場合は、eagerCursor
をtrue
に設定することができます。
オプション#2:データベース側の更新
また、データベース自体に直接更新を実行することができます。ただし、クエリビルダがこの機能をサポートしていないため、クエリを自分で作成する必要があります。
// 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}}
);
});
');
forEach
で使用される機能は、普通のjavascript関数であるので、あなたは更新するものをより詳細に制御する必要がある場合、あなたはそこにいくつかのより多くのロジックを挿入することができます。
多分、集合体で?? – Fran