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

时间:2017-01-10 18:27:17

标签: sql node.js postgresql knex.js

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

row: anonymous { values: '{(1),(2)}' }

我试图在Node中循环结果,

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

我使用的是array_agg,为什么输出是字符串,如何将其转换为数组?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

可以使用:unnest

将数组转换为一组行
create temp table t (name text);
insert into t values ('name1'),('name2'),('name3'),('name4');

select unnest(array_agg(name)) as aname from t

+-------+
| aname |
+-------+
| name1 |
+-------+
| name2 |
+-------+
| name3 |
+-------+
| name4 |
+-------+

答案 2 :(得分:0)

我也遇到了这个问题,并且由于需要返回固定数量的行,所以嵌套也不是一种选择,我不能保证我的内容不会包含,或括号,正则表达式解决方案具有挑战性。

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