Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用node.js向Mongodb插入多个文档_Javascript_Node.js_Mongodb_Mongoose_Mongodb Query - Fatal编程技术网

Javascript 使用node.js向Mongodb插入多个文档

Javascript 使用node.js向Mongodb插入多个文档,javascript,node.js,mongodb,mongoose,mongodb-query,Javascript,Node.js,Mongodb,Mongoose,Mongodb Query,我试图使用node.js将多个文档插入到我的数据库中,但出现了一个错误: MongoError:应用程序关闭的连接 是否有并行插入多个文档的选项 这是我的密码: var MongoClient = require('mongodb').MongoClient; var dbName = "tst1"; var port = "27017"; var requiredCollection = "stocks" var host = "localhost"; // open the conn

我试图使用node.js将多个文档插入到我的数据库中,但出现了一个错误: MongoError:应用程序关闭的连接 是否有并行插入多个文档的选项

这是我的密码:

var MongoClient = require('mongodb').MongoClient;



var dbName = "tst1";
var port = "27017";
var requiredCollection = "stocks"
var host = "localhost";

// open the connection the DB server

MongoClient.connect("mongodb://" + host + ":" + port + "/" + dbName, function (error, db){

    console.log("Connection is opened to : " + "mongodb://" + host + ":" + port + "/" + dbName);

    if(error) throw error;

        var ibm = {'_id' : 1, 'value' : 1, 'ticker' : 'IBM'};

        db.collection(requiredCollection).insert(ibm, function(error, inserted) {
            if(error) {
                console.error(error);

            }
            else {
                console.log("Successfully inserted: " , inserted );
            }

        }); // end of insert


        var apple = {'_id' : 2, 'vlue' : 1, 'ticker' : 'AAPL'};

        db.collection(requiredCollection).insert(apple, function(error, inserted) {
            if(error) {
                console.error(error);

            }
            else {
                console.log("Successfully inserted: " , inserted );
            }

        }); // end of insert





        var intel = {'_id' : 3, 'value' : 1, 'ticker' : 'INTC'};

        db.collection(requiredCollection).insert(intel, function(error, inserted) {
            if(error) {
                console.error(error);

            }
            else {
                console.log("Successfully inserted: " , inserted );
            }

        }); // end of insert


        var f5 = {'_id' : 4, 'value' : 1, 'ticker' : 'FFIV'}; 

        db.collection(requiredCollection).insert(f5, function(error, inserted) {
            if(error) {
                console.error(error);

            }
            else {
                console.log("Successfully inserted: " , inserted );
            }

        }); // end of insert




        var arris = {'_id' : 5, 'value' : 1, 'ticker' : 'ARRS'};

        db.collection(requiredCollection).insert(arris, function(error, inserted) {
            if(error) {
                console.error(error);

            }
            else {
                console.log("Successfully inserted: " , inserted );
            }

        }); // end of insert

        db.close();





}); // Connection to the DB
在这里,库可以帮助您理解异步代码中的回调,它的主要帮助是消除对下一次代码调用缩进的需要,从而实现代码爬行

事实上,您可以在中完成这些操作,而不是进行合理数量的操作。我们只需要等待每一个完成,这就是回调的目的。当操作完成时,它会回调以调用下一个操作:

var MongoClient = require('mongodb').MongoClient,
    async = require('async');

var dbName = "tst1";
var port = "27017";
var requiredCollection = "stocks"
var host = "localhost";

// open the connection the DB server

MongoClient.connect("mongodb://" + host + ":" + port + "/" + dbName, function (error, db){

    console.log("Connection is opened to : " + "mongodb://" + host + ":" + port + "/" + dbName);

    if(error) throw error;

    async.parallel(
      [        
        function(callback) {      
          var ibm = {'_id' : 1, 'value' : 1, 'ticker' : 'IBM'};

          db.collection(requiredCollection).insert(ibm, function(error, inserted) {
            if(error) {
              console.error(error);
              callback(error);
            } else {
              console.log("Successfully inserted: " , inserted );
              callback();
            }
          }); // end of insert
       },
       function(callback) {
         var apple = {'_id' : 2, 'vlue' : 1, 'ticker' : 'AAPL'};

         db.collection(requiredCollection).insert(apple, function(error, inserted) {
           if(error) {
             console.error(error);
             callback(error);
           } else {
             console.log("Successfully inserted: " , inserted );
             callback();
           }
         }); // end of insert
       },
       function(callback) {    
         var intel = {'_id' : 3, 'value' : 1, 'ticker' : 'INTC'};

         db.collection(requiredCollection).insert(intel, function(error, inserted) {
           if(error) {
             console.error(error)
             callback(error);
           } else { 
             console.log("Successfully inserted: " , inserted );
             callback();
           }
        }); // end of insert
      },
      function(callback) {    
        var f5 = {'_id' : 4, 'value' : 1, 'ticker' : 'FFIV'}; 

        db.collection(requiredCollection).insert(f5, function(error, inserted) {
          if(error) {
            console.error(error);
            callback(error);
          } else {
            console.log("Successfully inserted: " , inserted );
            callback();
          }
        }); // end of insert
      },
      function(callback) { 
        var arris = {'_id' : 5, 'value' : 1, 'ticker' : 'ARRS'};

        db.collection(requiredCollection).insert(arris, function(error, inserted) {
          if(error) {
            console.error(error)
            callback(error);
          } else {
            console.log("Successfully inserted: " , inserted );
          }
        }); // end of insert
      },
    ],
    function(err) {
      // called when everything is done
      db.close();
    }    
  );
}); // Connection to the DB
现在,每个操作都会等待从自己的回调上下文调用自己的回调,并且在所有操作结束时关闭连接之前,流控制也会等待所有操作完成

但如前所述,除非这是一个一次性脚本,否则您基本上不会调用。关闭数据库连接,您只会打开它一次。

该库可以帮助您理解异步代码中的回调,它的主要帮助是通过消除对下一次代码调用缩进的需要来实现代码爬行

事实上,您可以在中完成这些操作,而不是进行合理数量的操作。我们只需要等待每一个完成,这就是回调的目的。当操作完成时,它会回调以调用下一个操作:

var MongoClient = require('mongodb').MongoClient,
    async = require('async');

var dbName = "tst1";
var port = "27017";
var requiredCollection = "stocks"
var host = "localhost";

// open the connection the DB server

MongoClient.connect("mongodb://" + host + ":" + port + "/" + dbName, function (error, db){

    console.log("Connection is opened to : " + "mongodb://" + host + ":" + port + "/" + dbName);

    if(error) throw error;

    async.parallel(
      [        
        function(callback) {      
          var ibm = {'_id' : 1, 'value' : 1, 'ticker' : 'IBM'};

          db.collection(requiredCollection).insert(ibm, function(error, inserted) {
            if(error) {
              console.error(error);
              callback(error);
            } else {
              console.log("Successfully inserted: " , inserted );
              callback();
            }
          }); // end of insert
       },
       function(callback) {
         var apple = {'_id' : 2, 'vlue' : 1, 'ticker' : 'AAPL'};

         db.collection(requiredCollection).insert(apple, function(error, inserted) {
           if(error) {
             console.error(error);
             callback(error);
           } else {
             console.log("Successfully inserted: " , inserted );
             callback();
           }
         }); // end of insert
       },
       function(callback) {    
         var intel = {'_id' : 3, 'value' : 1, 'ticker' : 'INTC'};

         db.collection(requiredCollection).insert(intel, function(error, inserted) {
           if(error) {
             console.error(error)
             callback(error);
           } else { 
             console.log("Successfully inserted: " , inserted );
             callback();
           }
        }); // end of insert
      },
      function(callback) {    
        var f5 = {'_id' : 4, 'value' : 1, 'ticker' : 'FFIV'}; 

        db.collection(requiredCollection).insert(f5, function(error, inserted) {
          if(error) {
            console.error(error);
            callback(error);
          } else {
            console.log("Successfully inserted: " , inserted );
            callback();
          }
        }); // end of insert
      },
      function(callback) { 
        var arris = {'_id' : 5, 'value' : 1, 'ticker' : 'ARRS'};

        db.collection(requiredCollection).insert(arris, function(error, inserted) {
          if(error) {
            console.error(error)
            callback(error);
          } else {
            console.log("Successfully inserted: " , inserted );
          }
        }); // end of insert
      },
    ],
    function(err) {
      // called when everything is done
      db.close();
    }    
  );
}); // Connection to the DB
现在,每个操作都会等待从自己的回调上下文调用自己的回调,并且在所有操作结束时关闭连接之前,流控制也会等待所有操作完成


但如前所述,除非这是一个一次性脚本,否则您基本上不会调用。关闭数据库连接后,您只能打开它一次。

您可以使用mongo bulk insert


您可以使用mongo批量插入

在MongoDB 3.2及更高版本中,可以使用db.collection.insertMany将多个文档保存到一个集合中

您的代码可以简化为:

var MongoClient = require('mongodb').MongoClient;

var dbName = "tst1";
var port = "27017";
var requiredCollection = "stocks"
var host = "localhost";

// open the connection the DB server

MongoClient.connect("mongodb://" + host + ":" + port + "/" + dbName, function (error, db){

    console.log("Connection is opened to : " + "mongodb://" + host + ":" + port + "/" + dbName);

    if(error) throw error;

        var docs = [{ _id: 1,  value: 1,  ticker: 'IBM' },
                    { _id: 2,  value: 1,  ticker: 'AAPL' },
                    { _id: 3,  value: 1,  ticker: 'INTC' },
                    { _id: 4,  value: 1,  ticker: 'FFIV' },
                    { _id: 5,  value: 1,  ticker: 'ARRS' }];

        db.collection(requiredCollection).insertMany(docs, function(error, inserted) {
            if(error) {
                console.error(error);
            }
            else {
                console.log("Successfully inserted: " , inserted );
            }

        }); // end of insert

        db.close();

}); // Connection to the DB
在MongoDB 3.2及更高版本中,可以使用db.collection.insertMany将多个文档保存到一个集合中

您的代码可以简化为:

var MongoClient = require('mongodb').MongoClient;

var dbName = "tst1";
var port = "27017";
var requiredCollection = "stocks"
var host = "localhost";

// open the connection the DB server

MongoClient.connect("mongodb://" + host + ":" + port + "/" + dbName, function (error, db){

    console.log("Connection is opened to : " + "mongodb://" + host + ":" + port + "/" + dbName);

    if(error) throw error;

        var docs = [{ _id: 1,  value: 1,  ticker: 'IBM' },
                    { _id: 2,  value: 1,  ticker: 'AAPL' },
                    { _id: 3,  value: 1,  ticker: 'INTC' },
                    { _id: 4,  value: 1,  ticker: 'FFIV' },
                    { _id: 5,  value: 1,  ticker: 'ARRS' }];

        db.collection(requiredCollection).insertMany(docs, function(error, inserted) {
            if(error) {
                console.error(error);
            }
            else {
                console.log("Successfully inserted: " , inserted );
            }

        }); // end of insert

        db.close();

}); // Connection to the DB

您需要仔细阅读异步代码。在所有其他操作完成之前调用.close。操作不一定按顺序完成。查看作为节点库的示例,了解如何按照您的意愿在系列中清楚地执行此操作。但一般来说,除非真正关闭数据库连接,否则您几乎永远不会真正想显式关闭数据库连接。您能给我一些代码示例吗?您需要阅读异步代码。在所有其他操作完成之前调用.close。操作不一定按顺序完成。查看作为节点库的示例,了解如何按照您的意愿在系列中清楚地执行此操作。但一般来说,除非真正关闭了数据库连接,否则您几乎永远不会真正想显式关闭数据库连接。您能给我一些代码示例吗?有人会认为所有sql都是相同的。。但firebase数据库略有不同,就像英国和美国的巨无霸一样……人们可能会认为没有sql的数据库都是一样的。。但firebase数据库略有不同,就像英国和美国的巨无霸一样。。。