我正在尝试从 node.js 程序更新 mongoDB 中的数组。我可以从 node.js 中修改数组,但无法保存更改。
我想我做错了什么。协助将不胜感激...
我正在尝试从 node.js 程序更新 mongoDB 中的数组。我可以从 node.js 中修改数组,但无法保存更改。
我想我做错了什么。协助将不胜感激...
更改此行:
({_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.
});
我知道现在帮助你有点晚了,但也许其他人可以受益于新的同伙通过 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;
}
);
有趣的是,我现在实际上正在做完全相同的任务!我有一个不同的问题,通过阅读文档得到了回答,但我在谷歌搜索时看到了这个问题。希望我帮助了某人!
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);
}
});
}
});
我认为您应该执行以下代码来解决问题
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
);
有关更多信息,您可以参考 这里