使用其他字段的值更新字段



如何用其他字段的值更新字段?例如,我想用字段created_at的值更新字段updated_at(这就像克隆字段)

$dm->createQueryBuilder('MyBundle:MyService')
            ->update()
            ->multiple(true)
            ->field('updated_at')->set(CREATED_AT_ATRIBUTE)
            ->getQuery()
            ->execute();

感谢

选项#1:应用程序端更新

使用Doctrine ODM时,最简单的方法是在应用程序端执行更新。因此,您可以获取所有要更新的对象,进行必要的调整并刷新它们。

$services = $dm->createQueryBuilder('MyBundle:MyService')
    ->getQuery()
    ->execute();
foreach ($services as $service) {
    $service->setUpdatedAt($service->getCreatedAt());
}
$db->flush();

$services表示mongo游标,它将在您迭代时获取文档。如果要一次从集合中提取所有文档,可以将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函数,因此如果您需要更多地控制更新内容,可以在其中插入更多的逻辑。

相关内容

  • 没有找到相关文章

最新更新