MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak mogę częściowo zaktualizować obiekt w MongoDB, aby nowy obiekt nałożył się / scalił z istniejącym?

Rozwiązałem to swoją funkcją. Jeśli chcesz zaktualizować określone pole w dokumencie, musisz je wyraźnie zaadresować.

Przykład:

{
    _id : ...,
    some_key: { 
        param1 : "val1",
        param2 : "val2",
        param3 : "val3"
    }
}

Jeśli chcesz zaktualizować tylko param2, źle to zrobić:

db.collection.update(  { _id:...} , { $set: { some_key : new_info  } }  //WRONG

Musisz użyć:

db.collection.update(  { _id:...} , { $set: { some_key.param2 : new_info  } } 

Więc napisałem taką funkcję:

function _update($id, $data, $options=array()){

    $temp = array();
    foreach($data as $key => $value)
    {
        $temp["some_key.".$key] = $value;
    } 

    $collection->update(
        array('_id' => $id),
        array('$set' => $temp)
    );

}

_update('1', array('param2' => 'some data'));


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongodb - Znajdź dokument z najbliższą liczbą całkowitą

  2. Znajdź dokumenty z tablicami, które nie zawierają dokumentu z określoną wartością pola w MongoDB

  3. Zapytanie o pole haszujące Mongoid

  4. MongoDb wyłącza się z kodem 100

  5. mongodb:znajdowanie najwyższej wartości liczbowej w kolumnie