为用户更新多个列-Postgresql和Node.js

时间:2018-10-15 14:59:48

标签: node.js postgresql

我很欣赏这个问题已经被讨论过很多次了,但似乎无法使其适用于我的情况,我只是没有正确理解语法或正确实现。

现在我有一个非常简单的更新方法,可以更新1列,并通过其ID查找该用户

User.update = (id, value) => {
  pool.query('UPDATE users SET membership_expiry_date = $2 where id = $1', [id, value], (err) => {
    if (err) {
      return console.error(err);
    }
    return console.log('User Updated');
  });
};

await User.update(req.body.user_id, "value");

我有多个列想要更新,但不确定如何设置。每次更新时,根据要更新的信息,我可以有不同数量的列进行更新

1 个答案:

答案 0 :(得分:1)

您可以将要传递的列作为对象传递,并动态构建查询。

User.update = (id, values) => {
      let columns = Object.keys(values);
      let params = [id];
      let query = "UPDATE users SET ";
      for(let i = 0; i < columns.length; i++) {
        query = `${query}${columns[i]} = $${params.length + 1},`
        params.push(values[columns[i]]);
      }
      query = `${query.substring(0, query.length-1)} WHERE id = $1`
      console.log(query);
      console.log(params)
    };

await User.update("req.body.user_id", {columnToUpdate: "newValue"});