Mongoose >=4.4 では、カスタム オブジェクト (またはvalue-objects ) を含む高度な カスタム スキーマ タイプの例を見つけることができませんでした。
次のようなカスタム タイプを使用するとします。
function Polygon(c) {
this.bounds = [ /* some data */ ];
this.npoints = /* ... */
/* ... initialize polygon ... */
};
Polygon.prototype.area = function surfaceArea() { /**/ };
Polygon.prototype.toObject = function toObject() { return this.bounds; };
次に、次のようなカスタム SchemaType を実装します。
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);
}
どうすればそれを保証できますか:
新しいオブジェクトが db (mongoose init )から「ハイドレート」されるたびに、単純なオブジェクトではなく Polygon インスタンスが作成されます。関数を使用することを理解してい
cast
ます。assert(model.polygon instanceof Polygon)
モデルを保存するたびに、Polygon 属性をエンコード
Polygon.prototype.toObject()
し、この場合はArray
mongodb のオブジェクトであるプレーン オブジェクト表現 ( ) として保存する必要があります。- これを使用
model.toObject()
すると、 を再帰的に呼び出してmodel.polygon.toObject()
、ドキュメントの完全なプレーン オブジェクト表現を取得します。