2017-09-15 50 views
0

我试图更新使用猫鼬3.10.8问题与猫鼬更新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' is empty. You must specify a field like so: {$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 } 
) 

那么我应该禁用设置?

回答

0

OK,阅读下面的文档

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

后,我不得不设置选项{覆盖:真正}

但是我怎么禁用对updatedAt:新的日期(“星期五, 2017年9月15日13时02分28秒GMT “),created_at:新的日期(” 星期五,2017年9月15日13时02分28秒GMT“)

因为我得到的错误

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

如果我删除updatedAt领域,而在命令提示符下运行其数据得到更新