Non ho trovato alcun esempio di avanzatocustom schema type che coinvolge oggetti personalizzati (o value-objects) in Mongoose> = 4.4.Mongoose avanzato schema personalizzato tipo di oggetto
Immaginate che io voglio usare un tipo personalizzato come:
function Polygon(c) {
this.bounds = [ /* some data */ ];
this.npoints = /* ... */
/* ... initialize polygon ... */
};
Polygon.prototype.area = function surfaceArea() { /**/ };
Polygon.prototype.toObject = function toObject() { return this.bounds; };
Avanti, implemento uno SchemaType personalizzato come:
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);
}
Come posso assicurare che:
Ogni volta che un nuovo oggetto viene "idratato" da db (mangusta init), Avrò un'istanza Poligono e non un oggetto semplice. Capisco che utilizzerà la funzione
cast
.assert(model.polygon instanceof Polygon)
Ogni volta che io salverò il mio modello l'attributo Poligono deve essere codificata e memorizzata come rappresentazione oggetto pianura (
Polygon.prototype.toObject()
) che in questo caso è un oggettoArray
in MongoDB.- Se si utilizza
model.toObject()
chiamerà in modo ricorsivo ilmodel.polygon.toObject()
per avere una rappresentazione di oggetto in chiaro del documento.