在yii中更新Mongodb的查询

时间:2013-06-17 05:57:04

标签: php mongodb yii-extensions yii

如何在mongodb中基于_id更新YII? 我试过的是

    $model= new MongoUrls();
      $criteria = new EMongoCriteria;
      $criteria->userid('==', $userid);
      $criteria->screenshot_path('!=', null);
      $criteria->screenshot_uploaded('!=', 1);
      $availablescreenshots=$model-> findAll($criteria);

      if(count($availablescreenshots)>0){
        foreach($availablescreenshots as $obj1){
             $path_parts = pathinfo($obj1->screenshot_path);

             if($social->upload($obj1->screenshot_path, 'test',$path_parts['basename']))          {

     $model->updateAll(array('_id'=>$obj1->_id  ), array('screenshot_uploaded'=>1)  );

} 
                            }

                        }

但它在Yii中显示错误"The EMongoDocument cannot be updated because it is new."

我想更新_id匹配相同值的文档

3 个答案:

答案 0 :(得分:1)

如果我正确地假设您正在使用的扩展名,那么您实际上需要$model->updateAll(),因为update()涉及更新当前活动记录而不是运行常规查询。这有点令人困惑,但这是Yii的工作方式。

答案 1 :(得分:1)

作为yii mongosuite docs states,updateAll的使用方式与通常的更新略有不同。此外,您正在使用循环中的updateAll,并且条件是您传递单个ID,这实际上没有意义。使用updateAll,您可以使用条件来更新模型。在这里你应该像这样使用部分更新:

// _id is already set because it comes from db
$obj1->screenshot_uploaded = 1;
// First param to set fields which should be updated
// Set second param to true, to make partial update
$obj1->update(array('screenshot_uploaded'), true);

答案 2 :(得分:0)

对我有用的方法是

$modifier = new EMongoModifier();
$modifier->addModifier('screenshot_uploaded', 'set', '1');
$criteria = new EMongoCriteria();
$criteria->addCond('_id','==', $obj1->_id   );           
$model->updateAll($modifier,$criteria   );