diff --git a/lib/mongoose/document.js b/lib/mongoose/document.js index edadf075136..8bb5bd73d2d 100644 --- a/lib/mongoose/document.js +++ b/lib/mongoose/document.js @@ -451,14 +451,24 @@ Document.prototype.__defineGetter__('modified', function () { */ function compile (tree, proto, prefix) { - for (var i in tree) - define(i, ((tree[i].constructor == Object - && Object.keys(tree[i]).length) - && (!tree[i].type || tree[i].__nested) - ? tree[i] + var keys = Object.keys(tree) + , i = keys.length + , limb + , key; + + while (i--) { + key = keys[i]; + limb = tree[key]; + + define(key + , ((limb.constructor == Object + && Object.keys(limb).length) + && (!limb.type || limb.type.type) + ? limb : null) - , proto - , prefix); + , proto + , prefix); + } }; function define (prop, subprops, prototype, prefix) {