Dado que ninguna de estas respuestas realmente le dice qué es lo que está mal aquí...
$conn = new Mongo();
$q = $conn->server->gameQueue;
$id = new MongoId("4d0b9c7a8b012fe287547157");
$q->update(array("_id"=>$id),array('$push' => array("done_by","2")));
Hay un problema con tu $push declaración, no está presionando "done_by" con un valor de "2", en realidad está enviando "done_by" y "2" ...
Aquí está el problema...
array('$push' => array("done_by","2"))
Esto debería tener un => no un ,
array('$push' => array("done_by" => "2"))
Sin embargo, tenga en cuenta que cada vez que ejecute esto, insertará otro "2" si desea que MongoDB solo inserte "2" si aún no existe en "done_by", entonces debe usar $addToSet ...
array('$addToSet' => array("done_by" => "2"))
Esta declaración no agregará 2 cada vez, solo la primera vez.