如何从node.js更新mongodb文档?
我正在尝试从一个node.js程序更新一个mongoDB中的数组。 我能够从node.js中修改数组,但是我无法获得保存的更改。
http://pastebin.com/j0Mnf7jP
我想我正在做一些非常错误的事情。 援助将不胜感激…
改变这一行:
({_id:doc._id},$set:{scores:zz});
至:
({_id:doc._id}, { $set:{scores:zz}} );
这也应该可能包裹一个callback,以捕获错误:
db.schools.update({_id:doc._id}, {$set:{scores:zz}}, function(err, result) { if (err) //do something. });
我知道现在帮助你已经有点晚了,但也许其他人可以从MongoDB大学的新队列中获益!
db.schools.update
应该读取db.students.update
。
@ tymeJV的答案给了rest:
- 将大括号内的
$set
:{$set:{scores:zz}}
-
添加一个callback函数来捕获错误:
db.collection( 'students' ).update ( { _id : doc._id }, { $set : { scores:zz } }, function( err, result ) { if ( err ) throw err; } );
有趣的是,我现在正在做同样的任务! 我有一个不同的问题,通过阅读文档回答,但是我在Google上search时看到了这个问题。 希望我帮助别人!
我认为你应该为解决问题做下面的代码
var lowScore = 9999.9; for ( var i=0; i<doc.scores.length; i++ ) { if ( doc.scores[i].type == "homework" && doc.scores[i].score < lowScore ) { lowScore = doc.scores[i].score; } }
然后使用以下查询更新您的集合
collection.update({ "_id":doc._id }, { $pull : { "scores" : { $and: [ {"type":"homework"}, { "score":lowScore} ] } } }, { "safe":true }, function( err, result ) { if (err) { console.log(err); } } // update callback );
欲了解更多信息,你可以参考这里