Mongoose avançado tipo de objeto de esquema personalizado

Não encontrei nenhum exemplo deavançado tipo de esquema customizado envolvendo objetos personalizados (ouobjetos de valor) em Mongoose> = 4.4.

Imagine que eu quero usar um tipo personalizado como:

function Polygon(c) {
  this.bounds = [ /* some data */ ];
  this.npoints = /* ... */
  /* ... initialize polygon ... */
};

Polygon.prototype.area = function surfaceArea() { /**/ };

Polygon.prototype.toObject = function toObject() { return this.bounds; };

Em seguida, implementei um SchemaType personalizado como:

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);
}

Como posso garantir que:

Toda vez que um novo objeto é "hidratado" do db (mangustoiniciar), Terei uma instância Polygon e não um objeto simples. Eu entendo que usará ocast função.assert(model.polygon instanceof Polygon)

Sempre que eu salvar meu Model, o atributo Polygon deve ser codificado e armazenado como uma representação de objeto simples (Polygon.prototype.toObject()) que, neste caso, é umArray objeto no mongodb.

Se eu usarmodel.toObject() chamará recursivamente omodel.polygon.toObject() para ter uma representação completa do objeto simples do documento.

questionAnswers(1)

yourAnswerToTheQuestion