2015-08-17 110 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