在mongoose 3.10.8中更新的问题

时间:2017-09-15 12:52:38

标签: node.js mongoose

我正在尝试使用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 }
)

然后我应该禁用set?

1 个答案:

答案 0 :(得分:0)

好的,阅读以下文件后

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

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

但是如何禁用updatedAt:new Date(“星期五,2017年9月15日13:02:28 GMT”),created_at:new Date(“Fri,2017年9月15日13:02:28 GMT”)< / p>

因为我收到了错误

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

如果我删除updatedAt字段,则在命令提示符

中运行数据时会更新数据