我正在尝试更新集合中的文档。我特别想更新一个字符串数组。以下是我的架构
var sampleSchema= mongoose.Schema({
fullName : String,
email : String,
rolesTaken : [String],
});
我基本上有一个这样的架构数组。我想为所有这些更新rolesTaken数组。 所以我做了以下
var async = require('async');
var ATmapping = require('path to Schema');
ATmapping.find({},function(err,lists){
if(err){
console.log(err);
return;
}
if(lists.length > 0){
async.each(lists,function(list,callback){
if(!list.rolesTaken){
list.rolesTaken =[];
}
list.rolesTaken.push("Patient");
list.markModified('rolesTaken');
list.save(function(err,item){
if (err){
console.log(err);
}
console.log('Saved', item);
callback();
});
});
}
});
我浏览了很多,最流行的解决方案是添加markModified。但它似乎不适用于我的情况。当我添加mongoose.debug时,我得到以下
atmappings.update({ _id: ObjectId("59074b127adeef0004b84ac3"), __v: 7 }, { '$set': { rolesTaken: [] }, '$inc': { __v: 1 } })
正如您所看到的,尽管我添加了markmodified和save(),但所采用的角色仍然是空的。我想知道我是否遗漏了阻止我在模式中保存值的内容。
提前致谢。
答案 0 :(得分:0)
以下是我如何使用mongoose将评论推送到我的某个应用中的线程。
Thread.findByIdAndUpdate(body.thread, { $push: { comments: comment.id }})
我只是通过id找到线程,然后使用$ push运算符将注释id推送到我稍后填充的comments属性。
您可以在此处阅读$ push运算符(mongoose v3.4)https://docs.mongodb.com/manual/reference/operator/update/push/