Ich habe es mit meiner eigenen Funktion gelöst. Wenn Sie ein bestimmtes Feld im Dokument aktualisieren möchten, müssen Sie es klar adressieren.
Beispiel:
{
_id : ...,
some_key: {
param1 : "val1",
param2 : "val2",
param3 : "val3"
}
}
Wenn Sie nur param2 aktualisieren möchten, ist es falsch:
db.collection.update( { _id:...} , { $set: { some_key : new_info } } //WRONG
Sie müssen Folgendes verwenden:
db.collection.update( { _id:...} , { $set: { some_key.param2 : new_info } }
Also habe ich so eine Funktion geschrieben:
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'));