我尝试使用我在模型中声明的新字段更新集合中的所有文档。此字段为布尔值,默认值为false。
我知道此问题已经提出过,但仍然无法解决我的问题。
我尝试不工作的一切。
这里是我试过的例子: 具有空查询的更新方法 - 因为我想更新所有文档, 因为我不想做任何更改,只需添加我在模型中添加的字段
User.update({},{},{multi: true},function(err,num) {
if (err){
console.log(err);
}
console.log(num);
console.log("all documents were updated with new field)
})
另一次尝试:
User.find({},function (err,docs) {
async.each(docs,function (doc,cb) {
doc.save(function (err) {
console.log(err);
cb();
})
},function () {
console.log("all documents were saved with new field)
})
})
有什么建议吗?
答案 0 :(得分:1)
Mongoose不允许将undefined
值设置为字段。这些字段不在文件中。您需要将一些内容传递给Mongoose以设置为 new field 的值。
所以你可以设置一个空字符串 -
User.update({},{$set: {newField: ''}}......)
或null -
User.update({},{$set: {newField: null}}.....)
但您需要提供一些值,以便Mongoose将其设置为文档。
修改 -
来自mongoose文档 -
默认情况下,mongoose仅在您创建新文档时应用默认值。如果使用update()和findOneAndUpdate(),则不会设置默认值。但是,mongoose 4.x允许您使用setDefaultsOnInsert选项选择加入此行为。
您可以详细了解here。