用新字段更新mongoose模型

时间:2017-03-09 14:22:47

标签: node.js mongoose

我尝试使用我在模型中声明的新字段更新集合中的所有文档。此字段为布尔值,默认值为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)
          })
       })

有什么建议吗?

1 个答案:

答案 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