sql >> Databáze >  >> NoSQL >> MongoDB

Jak mohu částečně aktualizovat objekt v MongoDB, aby se nový objekt překryl / sloučil se stávajícím

Vyřešil jsem to vlastní funkcí. Pokud chcete aktualizovat zadané pole v dokumentu, musíte jej jasně uvést.

Příklad:

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

Pokud chcete aktualizovat pouze param2, je to špatné:

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

Musíte použít:

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

Takže jsem napsal funkci něco takového:

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. Keras předpovídá, že se nevrátí do celerové úlohy

  2. C# - MongoDB - Aktualizace prvku uvnitř vnořeného dokumentu

  3. MongoDB $sum a $avg dílčích dokumentů

  4. Redis filtrovat podle rozsahu, seřadit a vrátit nejprve 10