Biorąc pod uwagę, że używasz Mongoose, możesz użyć „wirtualnych”, które są zasadniczo fałszywymi polami tworzonymi przez Mongoose. Nie są przechowywane w bazie danych, po prostu są wypełniane w czasie wykonywania:
// Duplicate the ID field.
Schema.virtual('id').get(function(){
return this._id.toHexString();
});
// Ensure virtual fields are serialised.
Schema.set('toJSON', {
virtuals: true
});
Za każdym razem, gdy toJSON jest wywoływane w modelu utworzonym z tego schematu, będzie on zawierał pole „id”, które odpowiada polu _id generowanemu przez Mongo. Podobnie możesz ustawić zachowanie dla toObject w ten sam sposób.
Zobacz:
- http://mongoosejs.com/docs/api.html
- http://mongoosejs.com/docs/guide.html#toJSON
- http://mongoosejs.com/docs/guide.html#toObject
Możesz streścić to w BaseSchema wszystkie swoje modele, a następnie rozszerzyć/wywołać, aby utrzymać logikę w jednym miejscu. Napisałem powyżej podczas tworzenia aplikacji Ember/Node/Mongoose, ponieważ Ember naprawdę woli mieć pole „id” do pracy.