Грешка при актуализиране на документ на Mongodb с Codeigniter: Модификацията на _id не е разрешена

Опитвам се да използвам Codeigniter с codeigniter-mongodb-library/tree/v2 в за да се свържете с mongo и да актуализирате документи с тази структура:

{
"_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