Vì bạn đang sử dụng Mongoose, bạn có thể sử dụng 'ảo', về cơ bản là các trường giả mà Mongoose tạo ra. Chúng không được lưu trữ trong DB, chúng chỉ được điền vào lúc chạy:
// Duplicate the ID field.
Schema.virtual('id').get(function(){
return this._id.toHexString();
});
// Ensure virtual fields are serialised.
Schema.set('toJSON', {
virtuals: true
});
Bất kỳ lúc nào toJSON được gọi trên Mô hình bạn tạo từ Lược đồ này, nó sẽ bao gồm trường 'id' khớp với trường _id mà Mongo tạo. Tương tự như vậy, bạn có thể đặt hành vi cho toObject theo cách tương tự.
Xem:
- http://mongoosejs.com/docs/api.html
- http://mongoosejs.com/docs/guide.html#toJSON
- http://mongoosejs.com/docs/guide.html#toObject
Bạn có thể trừu tượng hóa điều này thành một BaseSchema tất cả các mô hình của bạn sau đó mở rộng / gọi ra để giữ logic ở một nơi. Tôi đã viết phần trên trong khi tạo ứng dụng Ember / Node / Mongoose, vì Ember thực sự thích có trường 'id' để làm việc.