Dato che stai usando Mongoose, puoi usare "virtuali", che sono essenzialmente campi falsi creati da Mongoose. Non vengono archiviati nel database, vengono semplicemente popolati in fase di esecuzione:
// Duplicate the ID field.
Schema.virtual('id').get(function(){
return this._id.toHexString();
});
// Ensure virtual fields are serialised.
Schema.set('toJSON', {
virtuals: true
});
Ogni volta che toJSON viene chiamato sul modello che crei da questo schema, includerà un campo 'id' che corrisponde al campo _id generato da Mongo. Allo stesso modo puoi impostare il comportamento per toObject allo stesso modo.
Vedi:
- http://mongoosejs.com/docs/api.html
- http://mongoosejs.com/docs/guide.html#toJSON
- http://mongoosejs.com/docs/guide.html#toObject
Puoi astrarre questo in un BaseSchema tutti i tuoi modelli, quindi estendere/richiamare per mantenere la logica in un unico posto. Ho scritto quanto sopra durante la creazione di un'app Ember/Node/Mongoose, poiché Ember preferisce davvero avere un campo "id" con cui lavorare.