Mongoose erweiterter benutzerdefinierter Schemaobjekttyp
Ich konnte kein Beispiel für ein @ find advanced custom schema type mit benutzerdefinierten Objekten (oder value-objects) in Mongoose> = 4.4.
Stellen Sie sich vor, ich möchte einen benutzerdefinierten Typ verwenden wie:
function Polygon(c) {
this.bounds = [ /* some data */ ];
this.npoints = /* ... */
/* ... initialize polygon ... */
};
Polygon.prototype.area = function surfaceArea() { /**/ };
Polygon.prototype.toObject = function toObject() { return this.bounds; };
Nächste implementiere ich ein benutzerdefiniertes SchemaType wie:
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);
}
ie kann ich versichern, dass:
Jedes Mal, wenn ein neues Objekt von db (mongoose @ "hydratisiert" widri) Habe ich eine Polygon-Instanz und kein einfaches Objekt. Ich verstehe, es wird das @ verwendcast
Funktion.assert(model.polygon instanceof Polygon)
Jedes Mal, wenn ich mein Modell speichere, sollte das Polygon-Attribut codiert und als einfache Objektdarstellung gespeichert werden Polygon.prototype.toObject()
) das ist in diesem Fall einArray
Objekt in Mongodb.
model.toObject()
es wird rekursiv das @ aufrufmodel.polygon.toObject()
, um eine vollständige, einfache Objektdarstellung des Dokuments zu erhalten.