Javascript 如何使用mongoose在MongoDB模式实例化中的关联数组/对象中执行foreach,而不选择模式配置参数?

Javascript 如何使用mongoose在MongoDB模式实例化中的关联数组/对象中执行foreach,而不选择模式配置参数?,javascript,arrays,node.js,mongodb,mongoose,Javascript,Arrays,Node.js,Mongodb,Mongoose,谷歌搜索了几个小时,却找不到确切的答案。也许我使用了错误的搜索参数?不管怎样,我来了: 我是MongoDB新手,正在尝试在保存模式实例化之前更改其值。我知道有很多关于使用“save”中间件的帖子,但我认为它不能解决我的问题 我有这样的模式设计: var fooSchema = new mongoose.Schema({ data:{ type1: { objectfoo: [], objectbar: []

谷歌搜索了几个小时,却找不到确切的答案。也许我使用了错误的搜索参数?不管怎样,我来了:

我是MongoDB新手,正在尝试在保存模式实例化之前更改其值。我知道有很多关于使用“save”中间件的帖子,但我认为它不能解决我的问题

我有这样的模式设计:

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
,结果表明,不仅for(…in…)选择了数据字段,而且还选择了模式实例化中的配置字段,如:

$__delta
$__version
increment
$__where
remove
model
$__buildDoc
init
$__storeShard
toJSON
[Function]
[Function]
所以我猜代码是有效的,当它碰到其他属性之一并试图将一个值推入时,它就会中断

请注意,“type1”和“objectfoo”需要位于关联类型的数组中,因为我需要按名称引用它们,所以我不能使用普通数组并循环通过
数组。length
。我可能是完全错误的,因为我是MongoDB的新手,所以如果有更有效的方法,请告诉我

我认为有一种方法可以只引用对象的数据字段,而不选择其他配置内容,但我在搜索了几个小时后找不到它

提前谢谢

编辑:为了清晰起见:我已经用以下内容对其进行了实例化:

var Foo = mongoose.model('foo', fooSchema);
var newfoo = new Foo();
因此,当我这样做时:

for(i in newfoo.data){
    console.log(newfoo.data[i]);
}
当您需要将模型数据转换为普通对象而无需任何额外字段或函数时,它将打印所有配置内容。

调用模型数据上的
toObject()

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

你真的从模式中创建了一个模型吗
var m=mongoose.Model('MyModel',fooSchema)
Yes。一切都创造出来了。为了更清楚,让我编辑一下这篇文章。toObject()成功了。谢谢。这是mongoose函数还是javascript本机函数?@PGT这是mongoose函数,请参阅