Mi sono imbattuto nello stesso identico problema e non c'era una soluzione semplice per <2.4, tuttavia dalla 2.4 il $setOnInsert operatore ti lascia fare esattamente questo.
db.collection.update( <query>,
{ $setOnInsert: { "firstTime": <TIMESTAMP> } },
{ upsert: true }
)
Consulta le 2.4 note sulla versione di setOnInsert per maggiori informazioni.