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