【问题标题】:Node-postgres - Flattening query result arrayNode-postgres - 展平查询结果数组
【发布时间】:2025-12-08 15:40:01
【问题描述】:

我想从我的数据库表中获取一个 id 数组作为一维数组。

我已将 QueryArrayConfig 用于查询字符串,并将 rowMode 设置为“array”。我正确地得到了我的 id,但它返回一个二维数组。

            const idQuery: pg.QueryArrayConfig = {
                name: 'get-ids',
                text: 'SELECT id FROM MySchema.SomeTable'
                rowMode: "array"
            };

            pool.query(idQuery).then((result: pg.QueryResult) => {
                console.log(result.rows);
                ...

我得到:[ [ 1 ], [ 2 ] ],但我需要[1 , 2]有没有办法直接对我的查询执行此操作? 或者我是否需要在 得到结果之后展平我的数组?

编辑: 如果我删除 rowMode: array,我会得到一个 javascript 对象数组:[anonymous { id: 1 }, anonymous { id: 2 }],这并不能满足我的需要。

【问题讨论】:

    标签: node.js postgresql typescript multidimensional-array flatten


    【解决方案1】:

    如果您使用“数组”的rowMode,它将按照文档https://node-postgres.com/features/queries#Query%20config%20object 将每一行作为单独的数组返回。默认情况下将每个都作为对象返回,因此只需删除 rowMode:"array" 行,看看是否可行。

    对于对象,您可以使用 map 或数组,您可以在原始结果中使用简单的 flatMap

    let results = result.flatMap(row => row); // for the array or array results
    let results = result.map(item => item.id); // for the object results
    

    【讨论】:

    • 如果我删除 rowMode: array,我会得到一个 javascript 对象数组:[ anonymous { id: 1 }, anonymous { id: 2 } ]
    • 嗯,它要么返回一个对象数组,要么返回一个数组数组,所以它归结为你喜欢使用什么