2014-05-03 37 views
0

我在下面写了一个小代码,问题在注释中解释。问题是在创建集合时使用粗体回调函数。创建集合时出现错误,创建集合的主要功能即将结束,但消息会随机显示,如以下输出中所示:回调函数意外运行

它在标有问题的行上被称为意外行标记。我在node.js和mongoDB环境中运行这个js文件。

谢谢。

var mongo = require("mongodb"); 
    var Db = mongo.Db; 
    var mongoC = mongo.MongoClient; 
    var assert = require('assert'); 

    mongoC.connect("mongodb://localhost:27017/social", { 
     native_parser: true 
    }, function (err, db) { 
     if (!err) { 
      console.log("We are Connected!\n"); 

      //creating the Collection 
      db.createCollection("node", { 
       strict: true 
      }, function (err, coll) { 
       if (!err) { 
        console.log("*********Collection Created Succesfully*********"); 
        console.log("Collection created Successfully\n" + JSON.stringify(coll) + "\n-------------------\n"); 
       } 
    else{ 
    console.log("Cannot create Collection because " + err); 
    } 
    }); 
    //Collection created now 


    console.log("*********************************inserting documents in the selected collection***********************"); 


    var coll = db.collection('node'); 
    var doc1 = {"name":"doc1","age":26}; 
    var manydocs = [{"name":"doc2","age":45},{"name":"doc3","age":19}]; 

    //coll.insert(doc1,{w:1},function(err,result){if(err){console.log("Error while inserting doc1 " + err);}else{console.log(result);}}); 
    //coll.insert(manydocs,{w:1},function(err,result){if(err){console.log("Error while inserting manydocs " + err);}}); 
    console.log("***************************documents are now updated successfully***********************************"); 


    console.log("*******************Now let us update the documents*******************"); 
    var query = {"name": "doc1"}; 
    var update= {$set : {"age":86}}; 
    //coll.update(query,update,function(err,result){if(!err){console.log(result + "'s age has been successfully update to " + result);}}); 
    console.log("***************Docments updated"); 


    console.log("*******************Querying the items**************************"); 

    coll.find().each(function(err,myDoc){console.dir(myDoc);console.dir("hey");}); 
    //coll.findOne(query,function(err,result){}); 

    var stream = coll.find(query).stream(); 
    stream.on("data",function(item){console.log(item._id);}); 
    stream.on("end",function(){}); 



    } 
    else { 
    console.log("Cannot connect because : " + err); 
    } 
    }); 

以下是输出。 我们已连接!

*********************************inserting documents in the selected collection*********************** 
***************************documents are now updated successfully*********************************** 
*******************Now let us update the documents******************* 
***************Docments updated 
*******************Querying the items************************** 
Cannot create Collection because Error: Collection node already exists. Currently in strict mode. 

回答

0

您应该node收集db.createCollection的回调里面工作:

UPDATE:运行这段代码:

var mongo = require("mongodb"); 
var Db = mongo.Db; 
var mongoC = mongo.MongoClient; 
var assert = require('assert'); 

mongoC.connect("mongodb://localhost:27017/social", { 
    native_parser: true 
}, function (err, db) { 
    if (!err) { 
    console.log("We are Connected!\n"); 

    //creating the Collection 
    db.createCollection("node", { 
     strict: true 
    }, function (err, coll) { 
     if (!err) { 
     console.log("*********Collection Created Succesfully*********"); 
     console.log("Collection created Successfully\n" + JSON.stringify(coll) + "\n-------------------\n"); 

     //Collection created now 


     console.log("*********************************inserting documents in the selected collection***********************"); 

     var doc1 = { 
      "name": "doc1", 
      "age": 26 
     }; 
     var manydocs = [{ 
      "name": "doc2", 
      "age": 45 
     }, { 
      "name": "doc3", 
      "age": 19 
     }]; 

     //coll.insert(doc1,{w:1},function(err,result){if(err){console.log("Error while inserting doc1 " + err);}else{console.log(result);}}); 
     //coll.insert(manydocs,{w:1},function(err,result){if(err){console.log("Error while inserting manydocs " + err);}}); 
     console.log("***************************documents are now updated successfully***********************************"); 


     console.log("*******************Now let us update the documents*******************"); 
     var query = { 
      "name": "doc1" 
     }; 
     var update = { 
      $set: { 
      "age": 86 
      } 
     }; 
     //coll.update(query,update,function(err,result){if(!err){console.log(result + "'s age has been successfully update to " + result);}}); 
     console.log("***************Docments updated"); 


     console.log("*******************Querying the items**************************"); 

     coll.find().each(function (err, myDoc) { 
      console.dir(myDoc); 
      console.dir("hey"); 
     }); 
     //coll.findOne(query,function(err,result){}); 

     var stream = coll.find(query).stream(); 
     stream.on("data", function (item) { 
      console.log(item._id); 
     }); 
     stream.on("end", function() {}); 

     } else { 
     console.log("Cannot create Collection because " + err); 
     } 
    }); 
    } else { 
    console.log("Cannot connect because : " + err); 
    } 
}); 
+0

如果我在这种情况下,相同的输出,这将是很好,但我现在正在得到的是非常意外的。这是否意味着错误IO需要时间,同时节点执行其他代码。 – logicalgeek

+0

请运行上面的代码并告诉我输出是什么。这段代码是异步的,所以你不能预测被调用操作的顺序 – wachme