Objetos anidados en Mongoose

Hay cierta magia en los ORM como Mongoose. Lo aprendí de la manera difícil (¡como de costumbre!), cuando intentaba iterar sobre las propiedades de los objetos anidados. Por ejemplo, aquí hay un esquema con un objeto anidado características define así:

var User = module.exports = new Schema({
  features: { 
    realtime_updates: {
      type: Boolean
    },
    storylock: {
      type: Boolean
    },
    custom_embed_style: {
      type: Boolean
    },
    private_stories: {
      type: Boolean
    },
    headerless_embed:{
      type: Boolean
    }
};

Digamos que quiero sobrescribir el objeto features_enabled con estas propiedades:

if (this.features) { 
  for (var k in this.features) {
    features_enabled[k] = this.features[k];
  }
}
console.log(features_enabled)
return features_enabled;

No tan rápido, estaba obteniendo muchas propiedades del sistema específicas de Mongoose. En su lugar, necesitamos usar toObject() , por ejemplo:

if (this.features.toObject()) { 
  for (var k in this.features.toObject()) {
    console.log('!',k)
    features_enabled[k] = this.features.toObject()[k];
  }
}

Recuerde la regla número uno, la computadora siempre tiene la razón. Si creemos que está mal, busque la regla número uno. :-)