Puisqu'aucune de ces réponses ne vous dit réellement ce qui ne va pas ici...
$conn = new Mongo();
$q = $conn->server->gameQueue;
$id = new MongoId("4d0b9c7a8b012fe287547157");
$q->update(array("_id"=>$id),array('$push' => array("done_by","2")));
Il y a un problème avec votre $push déclaration, vous ne poussez pas "done_by" avec une valeur de "2", vous envoyez en fait "done_by" et "2" ...
Voici le problème...
array('$push' => array("done_by","2"))
Cela devrait avoir un => pas un ,
array('$push' => array("done_by" => "2"))
Cependant, notez que chaque fois que vous l'exécutez, il insérera un autre "2" si vous voulez que MongoDB n'insère "2" que s'il n'existe pas déjà dans "done_by", alors vous devez utiliser $addToSet ...
array('$addToSet' => array("done_by" => "2"))
Cette instruction n'ajoutera pas 2 à chaque fois, seulement la première fois.