There is a certain magic in ORMs like Mongoose. I learned it the hard way (as usual!), when I was trying to iterate over nested object’s properties. For example, here is a schema with a nested object features defines like this:
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
}
};
Let’s say I want to overwrite object features_enabled with these properties:
if (this.features) {
for (var k in this.features) {
features_enabled[k] = this.features[k];
}
}
console.log(features_enabled)
return features_enabled;
Not so fast, I was getting a lot of system properties specific to Mongoose. Instead we need to use toObject()
, e.g.:
if (this.features.toObject()) {
for (var k in this.features.toObject()) {
console.log('!',k)
features_enabled[k] = this.features.toObject()[k];
}
}
Remember rule number one, computer is always right. If we think that it’s wrong — look up the rule number one. :-)