Aangezien je Mongoose gebruikt, kun je 'virtuals' gebruiken, dit zijn in wezen nepvelden die Mongoose maakt. Ze worden niet opgeslagen in de DB, ze worden gewoon ingevuld tijdens runtime:
// Duplicate the ID field.
Schema.virtual('id').get(function(){
return this._id.toHexString();
});
// Ensure virtual fields are serialised.
Schema.set('toJSON', {
virtuals: true
});
Elke keer dat toJSON wordt aangeroepen in het model dat u op basis van dit schema maakt, bevat het een 'id'-veld dat overeenkomt met het _id-veld dat Mongo genereert. Op dezelfde manier kunt u het gedrag voor toObject op dezelfde manier instellen.
Zie:
- http://mongoosejs.com/docs/api.html
- http://mongoosejs.com/docs/guide.html#toJSON
- http://mongoosejs.com/docs/guide.html#toObject
Je kunt dit samenvatten in een BaseSchema en al je modellen uitbreiden/aanroepen om de logica op één plek te houden. Ik schreef het bovenstaande tijdens het maken van een Ember/Node/Mongoose-app, omdat Ember echt de voorkeur geeft aan een 'id'-veld om mee te werken.