我是nodejs和mongodb的新手 执行我的聚合命令后我想要做的是删除聚合命令找到的最低分数。 这是我的代码:
MongoClient.connect('mongodb://localhost:27017/school', function(err, db) {
if(err) throw err;
var students = db.collection("students");
students.aggregate( [ { "$unwind": "$scores" },
{"$group": { '_id':'$_id' , 'score': {'$min': "$scores.score" } } }],function(err, result){
if(err) throw err;
for(var i=0; i<200; i++){
//console.log(result[i].score);
updateStudents(result[i]._id,result[i].score);
}
});
function updateStudents(_id,score){
var query = {'_id':_id};
var operator = {'$unset' : {'scores.score' : score}};
var options = {multi : true};
students.update(query,operator,options,function(err,updated){
if(err) throw err;
console.dir('Successfully Updated' + updated);
});
}
});
它表示已成功更新,但当我通过查询检查时,它没有降低用户的最低分数。
这是架构的样子:
db.students.find({'_id':0}).pretty()
{
"_id" : 0,
"name" : "aimee Zank",
"scores" : [
{
"type" : "exam",
"score" : 1.463179736705023
},
{
"type" : "quiz",
"score" : 11.78273309957772
},
{
"type" : "homework",
"score" : 6.676176060654615
},
{
"type" : "homework",
"score" : 35.8740349954354
}
]
}
我想放弃得分最低但不能
的第一个元素答案 0 :(得分:2)
您的函数updateStudents
设置了一个关闭连接return db.close();
很明显,如果一次更新完成并在完成所有更新之前调用回调,则会出现MongoError: Connection Closed By Application
错误。
您不应在node.js应用中请求后关闭连接。您应始终使用相同的连接,将其通过您的应用程序传递给所有需要它的模块。
要从数组中删除值,不应使用$ unset来删除整个字段。你应该使用:
var operator = {'$pull' : {'scores' : {'score' : score} } };
将从数组分数中删除值得分。