无法找到Mongo游标

时间:2015-07-30 04:46:47

标签: mongodb symfony doctrine-orm doctrine-odm

我的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++;
    }
    }
}

1 个答案:

答案 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内移动此方法。

希望这个帮助