2015-09-08 52 views
4

虽然笨作出更新MongoDB中,我有以下错误:MongoWriteConcernException。的(immutable)的字段“_id”被发现被改变为_id

Type: MongoWriteConcernException 

Message: localhost:27017: After applying the update to the document {_id: ObjectId('55ee98543bd7af780b000029') , ...}, the (immutable) field '_id' was found to have been altered to _id: "55ee98543bd7af780b000029" 

Filename: C:\xampp\htdocs\CI\application\models\mongo_model.php 

这里是我的控制器代码

public function update() 
{ 
    $userdata['firstname'] = $this->input->post('txtfirstname'); 
    $userdata['lastname'] = $this->input->post('txtlastname'); 
    $userdata['email'] = $this->input->post('txtemail'); 
    $userdata['password'] = md5($this->input->post('txtpassword')); 
    $userdata['_id'] = $this->input->post('hiddenId'); 
    $collection= $this->mongo_model->updateuserdb($userdata); 
    if ($collection) 
    { 
     header('location:'.base_url()."index.php/user".$this->index()); 
    } 
} 

和模型代码是

public function updateuserdb($userdata) 
{ 
    $id = $userdata['_id']; 
    $collection = $this->mongo_db->db->selectCollection('myfirstCollection'); 
    $query = $collection->update(array('_id' => new MongoId($id)), array('$set' => $userdata), array('upsert' => FALSE)); 
    return $query; 
} 
+0

错误信息如何解释不够? '_id'字段是“不可变的”,这意味着你不能改变它的值。如果你对数据库有一般的了解,那么“修改主键”应该是你理解不了的一般概念。 –

+1

即使值相同,您也必须从更新文档中移除_id字段,否则会发生此错误 – Sammaye

回答

3

您不能更新_id领域。

请注意,您的$userdata对象变量包含_id字段,然后您继续传递该对象作为要更新的值。因此,您正试图更新_id字段。

您需要从$userdata删除_id当做' $ set'=> $ userdata

$collection->update(array('_id'=>new MongoId($id)),array('$set'=>$userdata),array('upsert'=>FALSE)); 
+0

感谢您的答案我真的犯了这个有趣的错误 –