Като се има предвид, че използвате Mongoose, можете да използвате „виртуални“, които по същество са фалшиви полета, които Mongoose създава. Те не се съхраняват в DB, те просто се попълват по време на изпълнение:
// Duplicate the ID field.
Schema.virtual('id').get(function(){
return this._id.toHexString();
});
// Ensure virtual fields are serialised.
Schema.set('toJSON', {
virtuals: true
});
Всеки път, когато toJSON бъде извикан на модела, който създавате от тази схема, той ще включва поле „id“, което съответства на полето _id, генерирано от Mongo. По същия начин можете да зададете поведението за toObject по същия начин.
Вижте:
- http://mongoosejs.com/docs/api.html
- http://mongoosejs.com/docs/guide.html#toJSON
- http://mongoosejs.com/docs/guide.html#toObject
Можете да абстрахирате това в BaseSchema всичките си модели, след което да разширите/извикате, за да запазите логиката на едно място. Написах горното, докато създавах приложение Ember/Node/Mongoose, тъй като Ember наистина предпочита да има поле „id“, с което да работи.