【问题标题】:How to return a plain value from a Knex / Postgresql query?如何从 Knex / Postgresql 查询中返回纯值?
【发布时间】:2019-07-16 22:10:54
【问题描述】:

我正在尝试使用 Knex 从 Postgres DB 返回一个简单的标量字符串值。到目前为止,我所做的一切都返回一个带有键(列名)和值的 JSON 对象,因此我必须进入对象才能获取值。如果我返回多行,那么我会得到多个 JSON 对象,每个对象都重复键。

我可能会返回多列,在这种情况下,每一行至少需要是一个数组。我不是在寻找指定单个列返回没有数组的值的特殊情况——我可以进入数组。我想避免使用重复列出列名作为键的 JSON 对象。

我浏览了 Knex 文档,但不知道如何控制输出。

我的表是一个简单的映射表,有两个字符串列:

CREATE TABLE public._suite
(
    piv_id character(18) NOT NULL,
    sf_id character(18)  NOT NULL,
    CONSTRAINT _suite_pkey PRIMARY KEY (piv_id)
)

当我使用诸如

之类的 Knex 方法构建查询时
let myId = 'foo', table = '_suite';
return db(table).where('piv_id', myId).first(['sf_id'])
                .then( function(id) { return(id); });

我得到{"sf_id":"a4T8A0000009PsfUAE"} ;我想要的只是"a4T8A0000009PsfUAE"

如果我使用原始查询,例如

return db.raw(`select sf_id from ${table} where piv_id = '${myId}'`);

我得到一个更大的 JSON 对象来描述结果:

{"command":"SELECT","rowCount":1,"oid":null,"rows":[{"sf_id":"a4T8A0000009Q9HUAU"}],"fields":[{"name":"sf_id","tableID":33799,"columnID":2,"dataTypeID":1042,"dataTypeSize":-1,"dataTypeModifier":22,"format":"text"}],"_parsers":[null],"RowCtor":null,"rowAsArray":false}

我必须做什么才能获得价值本身? (同样,如果它在数组中,我没问题——我只是不想要列名。)

【问题讨论】:

    标签: postgresql knex.js


    【解决方案1】:

    看看pluck方法。

    db(table).where('piv_id', myId).pluck('sf_id'); // => will return you ["a4T8A0000009PsfUAE"]
    

    【讨论】:

    • 这会不会仍然返回tableType[] 而不是columnType[]
    猜你喜欢
    • 1970-01-01
    • 2015-10-29
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 2016-01-12
    • 2013-11-22
    • 1970-01-01
    相关资源
    最近更新 更多