【发布时间】:2015-10-25 01:22:17
【问题描述】:
在编程方面,我是个菜鸟。我正在尝试了解 Node.js 和 MongoDB。
下面是我的代码,它将搜索数据库并按州(例如加利福尼亚州、夏威夷州、佛蒙特州等)和最高温度对其进行排序。
当我运行 app.js 时,我总是得到这个错误:
process.nextTick(function() { throw err; }); ^ MongoError: server localhost:27017 sockets close at Server.destroy (D:...\node_modules\mongodb\node_modules\mongodb- 核心\lib\topologies\server.js:664:47)
据我了解,这是因为在我对数据库的 update() 完成之前,游标已到达数据库的末尾。如果我错了,请纠正我。
我该如何解决这个问题?如果我注释掉直接在 db.collection.update() 调用下的 if (err) throw err; ,那么没有错误消息(显然),但我想防止错误首先,这样我就可以使用 if (err) throw err;
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect('mongodb://localhost:27017/weather', function(err, db) {
if(err) throw err;
var cursor = db.collection('data').find().sort({"State" : 1, "Temperature" : -1});
var newstate = "";
var query = {};
//console.log(docs);
cursor.each(function (err, doc) {
if (err) throw err;
if (doc == null){
return db.close();
}
if (newstate != doc.State) {
//console.log("We are on State: " + doc.State + "\n");
newstate = doc.State;
query['_id'] = doc['_id'];
//console.log("query id is "+query['_id'] + "\n")
var operator = { '$set' : { 'month_high' : true } };
db.collection('data').update(query, operator, function(err, updated) {
if(err) throw err;
console.dir("Successfully updated " + doc.State + " documents.");
return; /*db.close();*/
});
}
//db.close();
});
});
【问题讨论】: