我正在使用NodeJS和MongoDB,一开始我创建了集合并填入它们,如果它们尚不存在的话。现在这只是开发,但对于备份和事情,我最终可能会在生产中做同样的事情或类似的事情。
我的问题是迭代变量(i
)会发生什么?回调是否会为该迭代使用正确的值?或者它会在列表中进一步获得其他值,或者根本没有?
ldb.createCollection('people', { strict: true }, function(err, col){
if(err) { console.log('createCollection( people ) ', err); }
else {
for(var i in people){
col.insert(people[i], { w: 1 }, function(err, doc){
people[i]._id = doc._id;
}
}
}
});
编辑:这是一个对象,而不是数组。
答案 0 :(得分:1)
当调用传递回insert
的回调时,i
的值将不会被保留(它很可能是people
中的最后一个键)。如果你想保留i
,你可以给它自己的功能范围如下:
people.forEach(function(person, i) {
col.insert(person, { w: 1 }, function(err, doc) {
person._id = doc._id;
});
});
编辑: 使用匿名函数而不是forEach方法:
for(var i in people) {
function(i) {
col.insert(people[i], { w: 1 }, function(err, doc){
people[i]._id = doc._id;
});
}(i);
}