我在一个名为的集合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之后搜索要好。