在谷歌上搜索了几个小时,却找不到可靠的答案。也许我使用了错误的搜索参数?不管怎样,我走了:
我是 MongoDB 的新手,我试图在保存模式实例化之前更改它的值。我知道有很多关于使用“保存”中间件的帖子,但我认为它不能解决我的问题。
我有这样的架构设计:
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”需要在关联类型的数组中,因为我需要按名称引用它们,所以我不能使用普通数组并循环遍历 array.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);
}
}
关于javascript - 如何在不选择模式配置参数的情况下使用 Mongoose 在 MongoDB 模式实例化的关联数组/对象中执行 foreach?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20172307/