将 array_agg 输出转换为数组而不是字符串

Gro*_*ler 5 sql postgresql node.js knex.js

我正在使用array_agg将值分组到一个数组中。行的输出是:

row: anonymous { values: '{(1),(2)}' }
Run Code Online (Sandbox Code Playgroud)

然后我尝试在 Node 中遍历结果,

row.values.forEach(...但它说values.forEach不是函数,因为typeof row.values是字符串。

我正在使用 array_agg,那么为什么输出是一个字符串,我如何将它转换为一个数组?

And*_*ell 8

我刚刚也遇到了这个问题,并且由于需要返回固定数量的行,因此无法选择取消嵌套,并且我无法保证我的内容不会包含 或,括号,这使得正则表达式解决方案具有挑战性。

我发现最好的解决方案是使用json_agg而不是array_agg. (请参阅文档)这会返回 JSON 格式的结果,并且节点会自动将其解释为 JavaScript 对象,因此您.forEach无需任何转换即可使用。


mik*_*e.k 0

如果您期望数组中包含整数,则可以使用正则表达式并循环遍历 的匹配项(\d+)

另一种方法是使用array_to_string内容中未出现的值(\n例如换行符)并使其连接array_to_string(some_array_content, E'\n'),然后稍后将其拆分。

一旦你以某种方式将其放入数组中,forEach就会起作用。

另外,我相信 Sequelize 可以处理数组:http://docs.sequelizejs.com/en/v3/api/datatypes/#array