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

Смежные вопросы