Dal momento che nessuna di queste risposte ti sta effettivamente dicendo cosa c'è che non va qui ...
$conn = new Mongo();
$q = $conn->server->gameQueue;
$id = new MongoId("4d0b9c7a8b012fe287547157");
$q->update(array("_id"=>$id),array('$push' => array("done_by","2")));
Si è verificato un problema con il tuo $push istruzione, non stai spingendo "done_by" con un valore di "2" stai effettivamente inviando "done_by" e "2" ...
Ecco il problema...
array('$push' => array("done_by","2"))
Questo dovrebbe avere un => non un ,
array('$push' => array("done_by" => "2"))
Tuttavia, tieni presente che ogni volta che esegui questo inserirà un altro "2" se vuoi che MongoDB inserisca solo "2" se non esiste già in "done_by", allora dovresti usare $addToSet ...
array('$addToSet' => array("done_by" => "2"))
Questa affermazione non aggiungerà 2 ogni volta, solo la prima volta.