递增函数返回错误
尝试增加我的数据库中的模型实例的整数字段。 这是相关的代码。
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,但是在高度并发的情况下可能并非总是如此)