【问题标题】:issue with update in mongoose 3.10.8mongoose 3.10.8 中的更新问题
【发布时间】:2017-09-15 21:26:24
【问题描述】:

我正在尝试使用 Mongoose 3.10.8 更新集合

let findQuery = {username: data.username};

 let updateQuery ={
    "$addToSet":{
                "schemes":{
                    "$each":[data.schemes]
                }
            }
    };


 return new Promise((resolve, reject) => {
        this.modelInstance.update(findQuery, updateQuery).exec((err, result) => {
            if(err) {
                console.log(err);
            } else {
                resolve(result);
            }
        })
    })

但是我的代码触发了以下错误:

{ MongoError: '$set' 为空。您必须像这样指定一个字段:{$set: {: ...}}

如果我使用mongoose.set('debug',true) 启用调试模式,我会看到查询中有一个空的$set

Mongoose: studentnotifications.update(
  { username: 'username1' },
  {
     '$set': {},
     '$setOnInsert': {
         created_at: new Date("Fri, 15 Sep 2017 12:51:36 GMT")
     }, '$addToSet': {
         schemes: {
             '$each': [ { schemeName: 'scheme1' } ]
         }
     }
  },
  { overwrite: undefined }
)

那我应该禁用设置吗?

【问题讨论】:

    标签: node.js mongoose


    【解决方案1】:

    好的,看完下面的文档

    https://github.com/Automattic/mongoose/wiki/3.8-Release-Notes#modelupdate-now-supports-overwrite

    我必须设置一个选项 {overwrite:true}

    但是如何禁用 updatedAt: new Date("Fri, 15 Sep 2017 13:02:28 GMT"), created_at: new Date("Fri, 15 Sep 2017 13:02:28 GMT")

    因为我收到了错误

    { MongoError: The dollar ($) prefixed field '$addToSet' in '$addToSet' is not valid for storage.
    

    如果我删除 updatedAt 字段,则数据在命令提示符下运行时会得到更新

    【讨论】:

      猜你喜欢
      • 2019-12-03
      • 2017-05-29
      • 2018-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多