Givet du bruger Mongoose, kan du bruge 'virtuelle', som i det væsentlige er falske felter, som Mongoose opretter. De er ikke gemt i databasen, de bliver bare udfyldt under kørsel:
// Duplicate the ID field.
Schema.virtual('id').get(function(){
return this._id.toHexString();
});
// Ensure virtual fields are serialised.
Schema.set('toJSON', {
virtuals: true
});
Hver gang toJSON kaldes på den model, du opretter fra dette skema, vil det inkludere et 'id'-felt, der matcher det _id-felt, som Mongo genererer. Ligeledes kan du indstille adfærden for toObject på samme måde.
Se:
- http://mongoosejs.com/docs/api.html
- http://mongoosejs.com/docs/guide.html#toJSON
- http://mongoosejs.com/docs/guide.html#toObject
Du kan abstrahere dette til et BaseSchema alle dine modeller og derefter udvide/kalde for at holde logikken på ét sted. Jeg skrev ovenstående, mens jeg oprettede en Ember/Node/Mongoose-app, da Ember virkelig foretrækker at have et 'id'-felt at arbejde med.