MongoWriteConcernException。发现(不可变)字段'_id'已被更改为_id

时间:2015-09-08 12:13:52

标签: php mongodb codeigniter

在CodeIgniter中使用MongoDB进行更新时出现以下错误:

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;
}

和型号代码是

AndroidManifest.xml

1 个答案:

答案 0 :(得分:6)

您无法更新_id字段。

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

执行'$ set'=> $ userdata 时,您需要从_id移除$userdata

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