Je vérifie si une paire de valeurs de clé spécifique existe et insère si elles n'existent pas. Pour une raison étrange, MongoDB renvoie une erreur lors de l'insertion. Toute aide serait grandement appréciée.MongoDB lance "Erreur: la connexion a été détruite par l'application" pendant l'insertion
Mise à jour 2: Ajout de la fonction entière.
{
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);
});
}
sortie
checked .... 078d40cc537de96310e945a50a60b0084e21d2e1
Inserting : 078d40cc537de96310e945a50a60b0084e21d2e1
insert error:Error: Connection was destroyed by application
TypeError: Cannot read property 'sha' of undefined
'col' est clairement défini en dehors de cette fonction et il n'est pas clair d'où cette fonction est appelée en termes de portée et qu'il n'y a pas en fait une déconnexion appelée n'importe où dans le code. Cela devrait en effet être appelé de l'intérieur de tout ce qui saisit l'objet 'col', et aussi sans aucune des autres actions mentionnées. –
@NeilLunn Je viens de mettre à jour le code avec des variables globales. '' '' col'''' est l'une des variables globales. – harishvc
Vous devez poster plus de code. Inclure où 'col' et' row' sont utilisés. –