J'ai rencontré exactement le même problème et il n'y avait pas de solution simple pour <2.4 cependant depuis 2.4 le $setOnInsert l'opérateur vous permet de faire exactement cela.
db.collection.update( <query>,
{ $setOnInsert: { "firstTime": <TIMESTAMP> } },
{ upsert: true }
)
Voir les 2.4 notes de version de setOnInsert pour plus d'informations.