0
我檢查是否存在特定的鍵值對,如果它們不存在則插入。出於某種奇怪的原因,MongoDB在插入過程中拋出一個錯誤。任何幫助將不勝感激。MongoDB在插入過程中拋出「錯誤:連接被應用程序破壞」
更新#2:增加了整個功能。
{
var connectURL = "mongodb://something";
var mycollection= "something2";
var db;
var col;
async.series([
// Connect to DB
function(callback) {
MongoClient.connect(connectURL,function(error, db2) {
if (error) {console.log("db connect error" + error);callback(error,"db connect error"); return;}
db = db2;
callback(null,"connect success");
});
},
function(callback) {
col = db.collection(mycollection);
callback(null,"collection success");
},
function(callback) {
//console.log ("insert begin ...");
var i = 1;
async.whilst(
function() { return i <= count },
function(callback) {
var mydocument = rows.shift();
col.findOne({ "sha" : mydocument.sha}, function(err, doc) {
console.log ("checked ....", mydocument.sha);
if(doc != null) {
console.log ("Exist :" + mydocument.sha);
} else {
console.log ("Inserting : " + mydocument.sha);
col.insert(mydocument,function(error,result) {
if (error) {
console.log("insert error:" + error);
callback(error);
return;
}
i++;
console.log ("inserted ...");
}); //end insert
} //end else
i++;
});//end findOne
callback(null);
},
function(error) {
callback(error,"insert sucess")
}
); //end async.whilst
},
function (callback){
//console.log ("###########close db");
db.close();
console.log("## end insert: "+ moment().format());
callback(null,"connection closed");
}
], function(error, results) {
if (error) { console.log("error"); }
//console.log(results);
});
}
輸出
checked .... 078d40cc537de96310e945a50a60b0084e21d2e1
Inserting : 078d40cc537de96310e945a50a60b0084e21d2e1
insert error:Error: Connection was destroyed by application
TypeError: Cannot read property 'sha' of undefined
'col'明確地定義在這個函數之外,它不清楚這個函數在範圍方面被調用的地方,而且實際上並沒有在代碼中的任何地方調用斷開連接。這確實應該從抓住「col」對象的內部調用,並且也不涉及任何其他提及的行爲。 – 2014-09-11 05:50:02
@NeilLunn我剛剛用全局變量更新了代碼。 ''''col''''是全局變量之一。 – harishvc 2014-09-11 06:57:33
您需要發表更多的代碼。包括使用「col」和「row」的位置。 – 2014-09-11 07:01:39