Tipo de objeto de esquema personalizado avanzado de mangosta
No pude encontrar ningún ejemplo de unavanzado tipo de esquema personalizado que implican objetos personalizados (oobjetos de valor) en Mangosta> = 4.4.
Imagine que quiero usar un tipo personalizado como:
function Polygon(c) {
this.bounds = [ /* some data */ ];
this.npoints = /* ... */
/* ... initialize polygon ... */
};
Polygon.prototype.area = function surfaceArea() { /**/ };
Polygon.prototype.toObject = function toObject() { return this.bounds; };
A continuación, implemento un SchemaType personalizado como:
function PolygonType(key, options) {
mongoose.SchemaType.call(this, key, options, 'PolygonType');
}
PolygonType.prototype = Object.create(mongoose.SchemaType.prototype);
PolygonType.prototype.cast = function(val) {
if (!val) return null;
if (val instanceof Polygon) return val;
return new Polygon(val)
}
PolygonType.prototype.default = function(val) {
return new Polygon(val);
}
¿Cómo puedo asegurar que:
Cada vez que un nuevo objeto se "hidrata" de db (mangostaen eso), Tendré una instancia de Polygon y no un objeto plano. Entiendo que usará elcast
función.assert(model.polygon instanceof Polygon)
Cada vez que guarde mi Modelo, el atributo Polígono debe codificarse y almacenarse como una representación de objeto simple (Polygon.prototype.toObject()
) que en este caso es unArray
objeto en mongodb.
model.toObject()
llamará recursivamente almodel.polygon.toObject()
tener una representación completa del objeto plano del documento.