递增函数返回错误

尝试增加我的数据库中的模型实例的整数字段。 这是相关的代码。

models.Options.findAll({ where: { PollId: poll_id, name: option_to_update } }).then((option) => { option.increment('votes'); res.json(option); }); 

当我console.log(选项),它显示为一个实例,所以我知道它从具有增量function的实例类inheritance,可以在这里看到

https://github.com/sequelize/sequelize/blob/3e5b8772ef75169685fc96024366bca9958fee63/lib/instance.js#L934

但是,当我尝试运行option.increment,我得到了这一点

未处理的拒绝types错误:option.increment不是函数

不太确定我做错了什么。

findAll()将返回一个结果数组,所以如果你想增加字段,你应该使用option[0].increment('votes') (假设你只想更新第一个结果)。

或者,如果您知道最多只有一个结果,您可以使用findOne而不是findAll

由于递增是完全在服务器端完成的,因此如果要在递增之后在数据库中检索文档的当前版本,则需要先重新装入实例。

我认为这将是这样做的适当方式:

 models.Options.findOne({ where: { PollId: poll_id, name: option_to_update } }).then(option => { return option.increment('votes'); // assumes `option` always exists }).then(option => { return option.reload(); }).then(option => { res.json(option); }); 

(当然,你可以采取一个捷径,并假定在递增之后votes将是其当前值+ 1,但是在高度并发的情况下可能并非总是如此)