2015-08-17 70 views
0
var MongoClient = require("mongodb").MongoClient; 
MongoClient.connect("mongodb://localhost:27017/test",function(err,db){ 
    if(err) throw err; 
    var query = {}; 
    var projection = {State : 1,Temperature : 1,_id : 1}; 
    var options = { 
     sort : [["State","asc"],["Temperature","desc"]] 
    }; 
    var state = ""; 
    var temp = 0; 
    db.collection("weather").find(query,projection,options).each(function(err,doc){ 
     if(err) throw err; 
     if(doc){ 
      // Check if we have found a new state 
      if(state !== doc.State){ 
       state = doc.State; 
       doc["month_high"] = true; 
       db.collection("weather").save(doc,function(err,saved){ 
        if(err) throw err; 
       }); 
      } 
     }else{ 
      return db.close(); 
     } 
    }); 
}); 

这是我的代码,我必须更新某些符合条件的文档。而不是存储所有需要更新的文档,然后再更新它们,我会在它们到来时更新它们。MongoDB连接过早终止

但是,我得到一个MongoError: server localhost:27017 sockets closed。我知道这是因为我试图使用已经关闭的连接。

如何正确排序数据库的关闭和文档的更新?

回答

1

它看起来像你的最后db.save()当你调用db.close()

检查,如果你正在处理的最后一个项目,然后调用db.close()db.save()回调仍在处理中。

+0

“检查您是否正在处理最后一个项目”。没有办法知道这是否是最后一项,除非我将它存储在数组中,然后检查索引以查看我是否正在处理最后一项。没有其他办法吗? :) –

+0

“检查索引,看看我是否正在处理最后一个项目。”很多 - 我现在不知道什么更好。值得一试,看看你的错误是否消失。 – lazlojuly