Ich konnte kein Beispiel für eine erweitertecustom schema type mit benutzerdefinierten Objekten (oder value-objects) in Mongoose> = 4.4 finden.Mongoose erweiterte benutzerdefinierte Schema Objekttyp
Stellen Sie sich vor, dass ich einen benutzerdefinierten Typen wie verwenden mag:
function Polygon(c) {
this.bounds = [ /* some data */ ];
this.npoints = /* ... */
/* ... initialize polygon ... */
};
Polygon.prototype.area = function surfaceArea() { /**/ };
Polygon.prototype.toObject = function toObject() { return this.bounds; };
Als nächst ich ein benutzerdefiniertes Schema implementieren 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);
}
Wie kann ich versichern:
Jedes Mal, wenn ein neues Objekt von db "hydratisiert" wird (Mungo init), Ich werde eine Polygon Instanz haben und kein einfaches Objekt. Ich verstehe, dass es die
cast
Funktion verwenden wird.assert(model.polygon instanceof Polygon)
Jedes Mal, werde ich mein Modell des Polygon-Attribut speichern sollte codiert und als reine Objektdarstellung (
Polygon.prototype.toObject()
), dass in diesem Fall einArray
Objekt in mongodb gespeichert werden.- Wenn ich
model.toObject()
10 verwende, wird es diemodel.polygon.toObject()
rekursiv aufrufen, um eine vollständige einfache Objektdarstellung des Dokuments zu haben.