如何在不使用模式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); } }