猫鼬高级自定义模式对象类型
Mongoose advanced custom schema object type
我在 Mongoose >=4.4.
中找不到任何 高级 custom schema type involving custom objects (or 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)中"hydrated"一个新对象,我都会有一个Polygon
实例而不是普通对象。我知道它将使用 cast
功能。 assert(model.polygon instanceof Polygon)
每次我保存我的模型时,Polygon 属性应该是
编码并存储为普通对象表示
(Polygon.prototype.toObject()
) 在这种情况下是 Array
对象 mongodb.
- 如果我使用
model.toObject()
它将递归调用 model.polygon.toObject()
以获得文档的完整普通对象表示。
感谢@vkarpov15 github.com:
,我找到了解决方案
我在 Mongoose >=4.4.
中找不到任何 高级 custom schema type involving custom objects (or 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)中"hydrated"一个新对象,我都会有一个Polygon 实例而不是普通对象。我知道它将使用
cast
功能。assert(model.polygon instanceof Polygon)
每次我保存我的模型时,Polygon 属性应该是 编码并存储为普通对象表示 (
Polygon.prototype.toObject()
) 在这种情况下是Array
对象 mongodb.- 如果我使用
model.toObject()
它将递归调用model.polygon.toObject()
以获得文档的完整普通对象表示。
感谢@vkarpov15 github.com:
,我找到了解决方案