Tonilin You Cant Обновите этот тип массива напрямую, для этого вам нужно найти индекс этого массива, в котором вы хотите обновить, например, если вы хотите обновить name
как play photo
, тогда вы должны найти индексphotos
где имя play
.Для этого я использовал следующий код:
$m = new Mongo();
$db=$m->yourdatabase;
//testarray is my collection name
$result=$db->testarray->find();
$index='';
foreach($result as $res)
{
if(array_key_exists("albums",$res))
{
foreach($res['albums'] as $ralbum)
{
if(array_key_exists("photos",$ralbum))
{
foreach($ralbum['photos'] as $k=>$rphotos)
{
if(array_key_exists("name",$rphotos))
if($rphotos['name']=='play')
$index=$k;
}
}
}
}
}
//echo $index;
// Теперь, чтобы обновить это значение в вашей базе данных, используйте этот код ...
if($index!=='')
{
//Run like this in Shell
//db.testarray.update({"albums.photos._id":ObjectId("4f545d1bc328103812d00000")},{'$set':{"albums.$.photos.1.name":"play132"}})
$condition=array("albums.photos._id"=>new MongoId("4f545d1bc328103812d00000"));
$data=array('$set'=>array("albums.$.photos.".$index.".name"=>"play photo"));
$result=$db->testarray->update($condition,$data);
$status=$db->Command(array('getlasterror'=>1));
print_r($status);
}