如何在不使用模式configuration参数的情况下使用mongoose在MongoDB模式实例化中的关联数组/对象中执行foreach?

一直谷歌search几个小时,并不能真正find一个坚实的答案。 也许我使用了错误的search参数? 反正我在这里:

我是MongoDB的新手,并试图在保存之前更改模式实例化的值。 我知道有很多使用“保存”中间件的post,但我不认为这将解决我的问题。

我有这样的模式devise:

var fooSchema = new mongoose.Schema({ data:{ type1: { objectfoo: [], objectbar: [] }; type2: { objectxxx: [], objectyyy: [] }; } }); 

这不是一个无限的对象,所以我不想做喜欢的东西,如链接到另一个架构或集合。

我想做一些事情:

 for(i in data){ for(j in data[i]){ data[i][j].push(val); } } 

但是,它会给我一个“未定义的错误”,或者说,对象不存在,并出错。 我在第一个for循环中做了一个console.log ,事实certificate,不仅for(… in …)select数据字段,而且还select模式实例化中的configuration字段,如:

 $__delta $__version increment $__where remove model $__buildDoc init $__storeShard toJSON [Function] [Function] 

所以我猜这个代码是有效的,当它碰到这些其他的属性之一时就会中断,并尝试推送一个值。

请注意,“type1”和“objectfoo”需要在关联types的数组中,因为我需要引用它们的名称,所以我不能使用一个正常的数组,并通过array.length循环。 因为我是MongoDB的新手,所以如果有更高效的方法可以做到这一点,请告诉我。

我想有一种方法只引用对象的数据字段,而不select其他configuration的东西,但我找不到了几个小时后。

提前致谢。

编辑:为了清晰:我已经实例化它已经:

 var Foo = mongoose.model('foo', fooSchema); var newfoo = new Foo(); 

所以当我这样做时:

 for(i in newfoo.data){ console.log(newfoo.data[i]); } 

它会打印出所有的configuration的东西。

在需要将模型数据转换为普通对象时不需要任何额外的字段或函数,就可以在模型数据上调用toObject()

 for(i in data.toObject()){ for(j in data[i].toObject()){ data[i][j].push(val); } }