javascript - mongoose pre hook findOneAndUpdate 修改从另一个集合获取的某些字段

标签 javascript node.js mongodb mongoose promise

我正在尝试修改 findOneAndUpdate pre hook 中的文档,代码如下

userSchema.pre('findOneAndUpdate', function (next) {
// this._update.$set
//var user = new User(this._update.$set)

var promiseArray = []  
promiseArray.push(// Fetching some data from other collection)

Promise.all(promiseArray).then(function (values) {

if (values[0].length === 0) {

  return next('Data not found')
} else {                    
    this._update.$set.salary = values.salary          
    return next()
}
}).catch(function (err) {    
next(err)
})

})

我收到错误

TypeError: Cannot read property '$set' of undefined

我知道为什么会收到此错误,因为我正在访问 Promise 内的“this”关键字,Promise 内的“this”与 pre 方法后的“this”不同 如何解决这个问题,我尝试通过分配来解决这个问题 this._update.$ 设置为注释代码中示例所示的不同值,但保存后它不会修改文档,我们只需更改 this._update.$set.salaray 值。任何帮助表示赞赏

最佳答案

您可以使用.bind()

Promise.all(promiseArray).then(function (values) {

if (values[0].length === 0) {

  return next('Data not found')
} else {                    
    this._update.$set.salary = values.salary          
    return next()
}
}.bind(this)).catch(function (err) {    
next(err)
})

})

关于javascript - mongoose pre hook findOneAndUpdate 修改从另一个集合获取的某些字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51444471/

相关文章:

javascript - Gulp watch 导致无限循环

javascript - 使用 HTML CSS Javascript 的时间轴 slider

javascript - d3.js:在树布局中展开多个路径

node.js - 如何使用 chokidar 忽略子目录中的文件

javascript - Node.js - Mongodb - Mongoose /无法将数组字符串传递到 $push 字段中

Javascript/Jquery Excel 文件名

mysql - 通过杂耍插入后从 MySQL 生成自动增量 ID?

javascript - 获取语​​音 channel 中的用户数

javascript - 如何使用 NodeJS 提供多个 html 文件

javascript - Node js 回调为 var