续集增量函数返回错误

时间:2017-05-22 04:50:49

标签: node.js postgresql sequelize.js

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

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

当我在console.log(选项)时,它显示为一个实例,所以我知道它继承自Instance类,它具有增量函数,可以在这里看到

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

然而,当我尝试运行option.increment时,我得到了回复

  

未处理拒绝TypeError:option.increment不是函数

不确定我做错了什么。

1 个答案:

答案 0 :(得分:4)

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

或者,如果您知道最多会有一个结果,则可以使用findOne代替findAll

因为递增完全是在服务器端完成的,如果要在递增后在数据库中检索文档的当前版本,则需要先reload该实例。

我认为这是适当的方式:

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,但在高度并发的情况下可能并非总是如此)