Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.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 - Fatal编程技术网

Javascript 使用Node.js驱动程序打印和更新MongoDB中的所有文档

Javascript 使用Node.js驱动程序打印和更新MongoDB中的所有文档,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我正在编写一个脚本,该脚本应该获取集合中文档的数量,然后打印所有文档,然后更新每个文档,问题是在运行它时出现了一个错误:MongoError:Connection Closed by application。 这是我的代码,我试着将db.close()放在几个地方,但没有用 var request = require('request'); var cheerio = require ('cheerio'); var fs = require('fs'); var MongoClient = r

我正在编写一个脚本,该脚本应该获取集合中文档的数量,然后打印所有文档,然后更新每个文档,问题是在运行它时出现了一个错误:MongoError:Connection Closed by application。 这是我的代码,我试着将db.close()放在几个地方,但没有用

var request = require('request');
var cheerio = require ('cheerio');
var fs = require('fs');
var MongoClient = require('mongodb').MongoClient;

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


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

        if(error) throw error;
        console.log ("Connected to: " + "mongodb://" + host + ":" + port + "/" + dbName);
    function update () {

        db.collection(requiredCollection).count({}, function (error, numOfDocs) {
            if(error) throw error;
            console.log("the number of docs is : " , numOfDocs);

            for (i=1; i<10; i++) {
                var findOneQuery = {'_id' : i};
                db.collection(requiredCollection).findOne(findOneQuery, function (error, doc) {
                    if(error) throw error;

                    console.log(doc._id + ". Doc - > " , doc);

                }); // end of findOne

                //db.close();
            }

             db.close();
        }); // end of count




    }
update();
// db.close();
 }); // end of connection to MongoClien
var request=require('request');
var cheerio=需要('cheerio');
var fs=需要('fs');
var MongoClient=require('mongodb')。MongoClient;
var dbName=“yahooStocks”;
var port=“27017”;
var requiredCollection=“股票”
var host=“localhost”;
MongoClient.connect(“mongodb://”+host+:“+port+”/”+dbName,函数(错误,数据库){
如果(错误)抛出错误;
console.log(“连接到:“+”mongodb://“+host+”:“+port+”/“+dbName”);
函数更新(){
collection(requiredCollection).count({},函数(error,numOfDocs){
如果(错误)抛出错误;
console.log(“文档数为:”,numofocs);

对于(i=1;i,您需要确保以异步方式运行这些查询。最好的方法是使用异步库。(此示例使用mongoose)

使用异步库:

var查询=[];

对于(i=1;i您已经获得了计数,在调用findOne时简单地倒计时如何。因此,您可以知道循环中的这些操作何时全部完成,并安全地调用
db.close()

我认为问题在于find和findOne的异步性质。db.close()当内部循环中的findOne仍在执行时调用。也许您可以引入一个回调函数来优雅地关闭连接。您能给我举个例子吗?是的,我忘了您刚才使用的是MongoClient,它的语法与我现在使用的不同。请确保签出async lib,并且流应该是相同的,但不同的语法x、 我应该在哪里关闭db?在哪里完成回调,检查注释“//当一切都完成”问题是:querys.push(db.collection(requiredCollection.findOne({''u id':i}))将无法工作,因为函数是异步的,您以同步方式编写它…函数是什么(查询,回调)?我以猫鼬模型为例,但使用相同的库可以获得类似的结果。
var queries = [];

for (i=1; i<10; i++) {
    queries.push(db.collection(requiredCollection).findOne({'_id' : i}));
}

async.each(queries, function(query, callback) {
    query.exec(function(err, doc) {
      if (err) callback(err);

      console.log(doc._id + ". Doc - > " , doc);

      // do things here

      callback();
    });
}, function(err) {
    // when everything is complete.
});