我试图用mongoose将大数据集插入到mongodb中。但在此之前,我需要确保我的for循环正常工作。节点使用猫鼬插入大数据
// basic schema settings
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var TempcolSchema = new Schema({
cid: {
type: Number,
required: true
},
loc:[]
});
TempcolSchema.index({
'loc': "sphere2d"
});
// we can easily see from the output that the forloop runs correctly
mongoose.connect('mongodb://localhost/mean-dev', function(err){
for (var i = 0; i < 10000000; i++) {
var c = i;
console.log(c);
}
});
输出为1,2,3,4,......等
现在我想添加一个猫鼬保存语句转换成for循环。
mongoose.connect('mongodb://localhost/mean-dev', function(err){
var Tempcol = mongoose.model('Tempcol', TempcolSchema);
for (var i = 0; i < 10000000; i++) {
var c = i;
console.log(c);
var lon = parseInt(c/100000);
var lat = c%100000;
new Tempcol({cid: Math.random(), loc: [lon, lat]}).save(function(err){});
}
});
输出仍然是1,2,3,4,......但是for循环一段时间后停止,并说是达到最大堆栈和有某种记忆的问题。另外,当我检查集合时,我意识到根本没有插入任何数据点。
因此,有谁知道可能发生了什么?谢谢。
非常感谢。我会稍后尝试代码! – 2014-09-04 16:41:40
我试过你的方法,它按预期工作。但我还有一个问题...而不是回调(错误)我把setTimeout(回调(错误),10000),并希望延迟所有回调10秒。它不像我想象的那样工作。我的推理有什么问题吗?谢谢。 – 2014-09-04 16:59:19
@Chandler这里的关键是你不能使用标准的'for'循环,并且需要循环来要求回调,因为这里每种情况都有。我不确定根据您的评论,您在代码中试图设置超时或为了什么目的。事实上,如果你有另一个问题,最好再提出一个问题。这个答案告诉你有关回调控制循环和插入的最佳方法。 – 2014-09-04 22:12:27