Musisz użyć notacji z kropkami:
foreach($horses as &$horse)
{
$newdata=array('$set'=>array('horses.odds'=> array($horses['odds'] => $price)));
$filter=array("marketId"=> $marketId);
$c->update($filter,$newdata);
}
Zobacz http://www.mongodb.org/ wyświetlacz/DOCS/kropka+notacja+%28Dochodzenie+do+obiektów%29 .