我試圖用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