मैंने इसे अपने स्वयं के कार्य से हल किया। यदि आप दस्तावेज़ में निर्दिष्ट फ़ील्ड को अपडेट करना चाहते हैं तो आपको इसे स्पष्ट रूप से संबोधित करने की आवश्यकता है।
उदाहरण:
{
_id : ...,
some_key: {
param1 : "val1",
param2 : "val2",
param3 : "val3"
}
}
अगर आप केवल param2 को अपडेट करना चाहते हैं, तो ऐसा करना गलत है:
db.collection.update( { _id:...} , { $set: { some_key : new_info } } //WRONG
आपको अवश्य उपयोग करना चाहिए:
db.collection.update( { _id:...} , { $set: { some_key.param2 : new_info } }
तो मैंने एक समारोह कुछ इस तरह लिखा:
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'));