我的StudentMarks
中有一个包含20000条记录的集合名称MongoDB
。我正在运行一个脚本来更新此集合的所有文档中的字段。处理5000条记录后,我收到以下错误。我无法找出为什么会发生这种情况以及如何解决它。
错误是:在第1125行找不到Mongo光标
以下代码我已在控制器中编写
public function updateAction(Request $request) {
$examStudentMarkDocument11 = $schoolDM - > getRepository('EduExamCbseBundle:ExamCbseStudentSubjectMark') - > findAll();
if (count($examStudentMarkDocument11)) {
$i = 0;
// MongoCursor::$timeout = -1;
foreach($examStudentMarkDocument11 as $stdnt) {
$id = $stdnt - > getId();
$examStudentMarkDocument1 = $schoolDM - > getRepository('EduExamCbseBundle:ExamCbseStudentSubjectMark') - > find($id);
$examStudentMarkDocument1 - > setCurrentSession($currentSessionYear); //Updating field here
$schoolDM - > persist($examStudentMarkDocument1);
$schoolDM - > flush();
$i++;
}
}
}
答案 0 :(得分:0)
我建议您使用querybuilder执行Updating multiple documents,而不是刷新每个文档。
因此,举例来说,您可以执行以下语句:
$this->get('doctrine_mongodb')
->getManager()
->createQueryBuilder('EduExamCbseBundle:ExamCbseStudentSubjectMark')
->update()
->multiple(true)
->field('currentSession')->set($currentSessionYear)
// ->field('username')->equals('sgoettschkes')// optional where conditions
->getQuery()
->execute();
最好在custom repository class内移动此方法。
希望这个帮助