2013-09-01 4 views
0

Я проходил курс mongodb и nodejs на MongoDBUniversity, и одна из задач - поиск документов с самой высокой зарегистрированной температурой для любого состояния, а затем добавление поля «month_high» в он. Я могу найти документы для состояния с самой высокой температурой, но не могу его обновить. Код выглядит следующим образом.Обновление не работает-NodeJs и MongoDB с использованием MongoClient

Может кто-нибудь сказать мне, что я могу сделать неправильно?

var MongoClient=require('mongodb').MongoClient; 
MongoClient.connect('mongodb://localhost:27017/course',function(err,db){ 
var cursor=db.collection("weather").find(); 
cursor.sort({"State":1,"Temperature":-1}); 
var oldState,newState; 
cursor.each(function(err,doc){ 
    if(err)throw err; 
    if(doc==null){ 
     return db.close(); 
    } 
    newState=doc.State; 
    if(newState!=oldState){ 
     var operator={'$set':{"month_high":true}}; 
      var query={"_id":doc._id}; 
      console.log(doc._id+" has temp "+doc.Temperature+" "+doc.State); 
      db.collection("weather").update(doc,operator,function(err,updated){ 
        console.log("hi");//---->Never Logs 
        if(err)throw err; 
        // console.log(JSON.stringify(updated)); 

       }) 

    } 
    oldState=newState; 

}); 





    }); 

ответ

3

Я не уверен на 100%, но, учитывая синтаксис сообщил о docs вы, возможно, придется указать параметр опций, даже если не использовать его:

db.collection("weather").update(doc,operator, options, function(err,updated) 

Кроме того, соединение может получить закрывается до вызова обратных вызовов. Что-то изменит, если вы удалите звонок db.close()?

+0

хорошо в соответствии с параметрами DOCS не является обязательным. Я все еще пробовал это, хотя, как вы сказали, но он по-прежнему остается неизменным. Ни одна из ошибок не была выбрана – Rasmus

+0

Опционально, если вы не хотите предоставлять обратный вызов (опять же, согласно синтаксису в документах, но я думаю, что видел, что он использовал способ ты сделал). Что-то изменит, если вы удалите вызов 'db.close()'? –

+0

вызов {db.close()} находится в цикле if ... поэтому я думаю, что это не должно иметь значения – Rasmus

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