我正在尝试从node.js程序更新mongoDB中的数组。我能够从node.js中修改数组,但我无法获得保存更改。
我认为我做错了。 将不胜感激......
答案 0 :(得分:10)
更改此行:
({_id:doc._id},$set:{scores:zz});
要:
({_id:doc._id}, { $set:{scores:zz}} );
这也应该包含一个回调函数来捕获错误:
db.schools.update({_id:doc._id}, {$set:{scores:zz}}, function(err, result) {
if (err)
//do something.
});
答案 1 :(得分:4)
我知道现在帮助你的时间有点晚了,但也许其他人可以在新群组通过MongoDB大学时受益!
db.schools.update
应该阅读db.students.update
。
@ tymeJV的答案给出了其余的答案:
$set
括起来:{$set:{scores:zz}}
添加回调函数以捕获错误:
db.collection( 'students' ).update (
{ _id : doc._id },
{ $set : { scores:zz } },
function( err, result ) {
if ( err ) throw err;
}
);
有趣的是,我现在正在做同样的任务!我有一个不同的问题,通过阅读文档回答,但我在谷歌搜索时看到了这个问题。希望我能帮助别人!
答案 2 :(得分:0)
我认为您应该使用以下代码来解决问题
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
);
有关详细信息,请参阅here
答案 3 :(得分:0)
var dbName = 'school'
var tableName = 'classA'
MongoClient.connect(dbName, function(err, db) {
if (err)
{
console.log(err);
}
else {
var collection = db.collection(tableName)
collection.update({_id:doc._id}, {$set:{scores:zz}}, function(err, result) {
if (err)
{
console.log(err);
}
else{
console.log(result);
}
});
}
});