Ошибка обновления документа MongoDB с помощью Codeigniter: мод на _id не разрешен

Я пытаюсь использовать Codeigniter с codeigniter-mongodb-library/tree/v2 в чтобы подключиться к монго и обновить документы с помощью этой структуры:

{
"_id" : ObjectId("50fd8bd460e958aa38000002"),
"created_at" : 1358793684,
"updated_at" : 1358793684,
"is_active" : 0,
"memberships" : [
    {
    }
],
"first_models" : [
    [ ]
],
"second_models" : [
    [ ]
],
"pages" : [
    [ ]
]
}

Все, что я хочу, это обновить какой-то документ с помощью данного _id. В частности, мне нужно добавить элементы в массив first_models. Из моей модели Codeigniter я вызываю это:

$result = $this->mongo_db
->push(array('_id' => '50fd8bd460e958aa38000002'),array('first_models' => array('Some text here'))) 
->update($this->collections['sites']); 

Я получаю эту ошибку, когда пытаюсь обновить один конкретный документ:

Mod on _id not allowed

Кажется, есть некоторый конфликт с данным _id... Я что-то упускаю и не знаю что :( Я использую Mongodb 2.2.2 с Codeigniter 2.1.3, PHP5.4 и Apache2.


person Courier    schedule 22.01.2013    source источник


Ответы (1)


Я шел в неправильном направлении с этим. Наконец, @Rajan указывает мне на правильное решение:

$updated = $this->mongo_db->where('_id', new MongoId($id))
->set($data)
->update('mycollection');

Вы можете видеть, используя set вместо push и ссылаясь на идентификатор объекта с помощью new MongoId($id) :-)

person Courier    schedule 23.01.2013