我正在浏览MongoDBUniversity上的mongodb和nodejs课程,其中一项任务涉及查找任何州的记录温度最高的文件,然后在其中添加一个字段“month_high”。我能够找到温度最高的州的文件但无法更新。代码如下。
有人可以告诉我,我可能做错了什么吗?
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;
});
});
答案 0 :(得分:3)
我不是100%肯定,但鉴于docs上报告的语法,您可能必须指定options参数,即使不使用它:
db.collection("weather").update(doc,operator, options, function(err,updated)
此外,在调用回调之前,连接可能会关闭。如果您删除db.close()
来电,它会改变什么吗?
答案 1 :(得分:0)
集合名称是'数据'。在这个作业'天气'是数据库名称。
请参阅 https://education.mongodb.com/courses/10gen/M101JS/2013_October/courseware/CRUD/Homework_2.2/
> use weather
switched to db weather
> db.data.findOne()