如何 return 来自 Knex / Postgresql 查询的普通值?
How to return a plain value from a Knex / Postgresql query?
我正在尝试使用 Knex return 来自 Postgres 数据库的简单标量字符串值。到目前为止,我所做的一切 return 都是一个带有键(列名)和值的 JSON 对象,因此我必须进入对象才能获取值。如果我 return 多行,那么我会得到多个 JSON 对象,每个对象都重复键。
我可以 returning 多个列,在这种情况下,每一行至少需要是一个数组。我不是在寻找一种特殊情况,即在没有数组的情况下指定单列 returns 值——我可以进入数组。我想避免 JSON 对象重复列名作为键。
我已经搜索了 Knex 文档,但没有看到如何控制输出。
我的 table 是一个简单的映射 table,有两个字符串列:
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}
我需要做什么才能获取值本身? (同样,如果它在一个数组中我没问题——我只是不想要列名。)
看看pluck方法。
db(table).where('piv_id', myId).pluck('sf_id'); // => will return you ["a4T8A0000009PsfUAE"]
我正在尝试使用 Knex return 来自 Postgres 数据库的简单标量字符串值。到目前为止,我所做的一切 return 都是一个带有键(列名)和值的 JSON 对象,因此我必须进入对象才能获取值。如果我 return 多行,那么我会得到多个 JSON 对象,每个对象都重复键。
我可以 returning 多个列,在这种情况下,每一行至少需要是一个数组。我不是在寻找一种特殊情况,即在没有数组的情况下指定单列 returns 值——我可以进入数组。我想避免 JSON 对象重复列名作为键。
我已经搜索了 Knex 文档,但没有看到如何控制输出。
我的 table 是一个简单的映射 table,有两个字符串列:
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}
我需要做什么才能获取值本身? (同样,如果它在一个数组中我没问题——我只是不想要列名。)
看看pluck方法。
db(table).where('piv_id', myId).pluck('sf_id'); // => will return you ["a4T8A0000009PsfUAE"]