最快的更新方式:update()或save()?

时间:2011-06-05 10:20:29

标签: php mongodb

我遍历我的集合的文档,做一些事情,然后更新数据库。但实际上,我正在更新文档的所有数据,如果我这样做,save()会比update()更快吗?

foreach ($cursor as $doc) {
  $doc['new_field'] = 'value';
  $coll->save($doc);

  /* or (currently) */

  $coll->update(array('known_field' => $doc['known_field']), array('$set' => array('new_field' => 'value')));
}

哪种方式更快?

1 个答案:

答案 0 :(得分:2)

::update应该更快,因为它只更新文档的某些字段。 ::save保存整个文档,可能会更慢。

通常最好尽可能使用::update,因为如果使用::save可能的并发问题。例如,如果两个线程已加载相同的文档,请更新它然后尝试保存。让我们说第一个线程已保存文档。然后第二个线程重写第一个线程的更改,您将丢失第一个线程的更新。通过原子更新,您永远不会遇到这个问题。