0

我在一个名为的集合Reports中有一个要处理的文档。我做一个查询

$collectionReports->find(array('processed' => 0)) 

(50 到 2000 个项目之间的任何地方)。我按我的需要处理它们并将结果插入另一个集合,但我需要更新原始报告以将处理设置为当前系统时间。现在它看起来像:

$reports = $collectionReports->find(array('processed' => 0));
$toUpdate = array();
foreach ($reports as $report) {
    //Perform the operations on them now
    $toUpdate = $report['_id'];
}
foreach ($toUpdate as $reportID) {
    $criteria = array('_id' => new MongoId($reportID));
    $data = array('$set' => array('processed' => round(microtime(true)*1000)));
    $collectionReports->findAndModify($criteria, $data);
}

我的问题是它的效率非常低。对于 2000 份报告,处理报告并将它们插入到集合中可能需要 700 毫秒,但对于同样的 2000 份报告,仅更新处理时间至少需要 1500 毫秒。有什么技巧可以加快速度吗?提前致谢。

编辑:处理时间不必精确,它可以是脚本运行的时间(+/- 10 秒左右),如果可以获取对象($report)并更新时间直接这样,比只在第一个foreach之后搜索要好。

4

1 回答 1

0

感谢 Sammaye,从 findAndModify() 更改为 update() 似乎工作得更好更快。

于 2012-12-01T19:51:54.947 回答