【问题标题】:NodeJS, pg-promise and array as parameterNodeJS、pg-promise 和数组作为参数
【发布时间】:2018-12-10 12:18:04
【问题描述】:

正在运行 NodeJSpg-promise

我有一个数组:

let my_array = new array('x', 'y', 'z');

我正在尝试使用pg-promise 将其作为参数传递给我的PostgreSQL 查询:

db_webhooks.any('SELECT cars FROM my_cars WHERE id IN ($1)', [my_array])
  .then...

但是由于类型错误而失败。 我尝试.join 数组,但也得到错误,因为它导致字符串'x,y,z' 而不是'x','y','z'

打印出调用的调试/查询给了我:

QUERY: SELECT cars FROM my_cars WHERE id IN (array['x','y','z'])

这应该是:

QUERY: SELECT cars FROM my_cars WHERE id IN ('x','y','z')

【问题讨论】:

  • [my_array] 将创建一个包含一个元素的数组,即您的数组new array('x', 'y', 'z')。试试db_webhooks.any(... , my_array)
  • 这给了我QUERY: SELECT cars FROM my_cars WHERE id IN ('x'),所以只包含第一个元素。
  • 好像... id IN ($1:csv) 解决了这个问题。
  • 然后看来您的调用不接受数组参数但想要一个逗号分隔的字符串,然后my_array.join(",") 可能会成功。
  • 如果您找到了解决您自己问题的方法,请不要犹豫,发布您自己的答案。

标签: node.js postgresql pg-promise


【解决方案1】:

库为此目的支持CSV Filter

await db.any('SELECT cars FROM my_cars WHERE id IN ($1:csv)', [my_array])
/*=> SELECT cars FROM my_cars WHERE id IN ('x', 'y', 'z') */

也可以使用:list,同理:

await db.any('SELECT cars FROM my_cars WHERE id IN ($1:list)', [my_array])
/*=> SELECT cars FROM my_cars WHERE id IN ('x', 'y', 'z') */

【讨论】:

    猜你喜欢
    • 2017-06-10
    • 2015-12-02
    • 2015-08-05
    • 2017-02-16
    • 2016-07-01
    • 2016-09-12
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    相关资源
    最近更新 更多