Tôi đã giải quyết nó bằng chức năng của riêng mình. Nếu bạn muốn cập nhật trường cụ thể trong tài liệu, bạn cần giải quyết nó một cách rõ ràng.
Ví dụ:
{
_id : ...,
some_key: {
param1 : "val1",
param2 : "val2",
param3 : "val3"
}
}
Nếu bạn chỉ muốn cập nhật param2, bạn thực hiện sai:
db.collection.update( { _id:...} , { $set: { some_key : new_info } } //WRONG
Bạn phải sử dụng:
db.collection.update( { _id:...} , { $set: { some_key.param2 : new_info } }
Vì vậy, tôi đã viết một hàm tương tự như vậy:
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'));