如何使用 KnexJS 获得正确的结果 运行 PostgreSQL 查询,该查询在数据库的 SQL 脚本编辑器中工作
How to have the proper results using KnexJS to run a PostgreSQL query which works in a SQL script editor in a DB
我正在尝试将在 SQL 脚本编辑器中运行的 PSQL 查询转换为 Knex.js。
我不知道如何得到我的结果我通过 Knex.js 进入数据库查询,我尝试了下面的内容。
Knex.js 查询的结果不是我想要的,我不知道如何获得结果,如下所述。
查询如下
select
*
from
(
select
d.id id,
unnest(d.recipients) recipient
from
documents d) as result
where
recipient = 'xxxx'
此查询从数据库返回的结果为
id
收件人
12
xxx
22
xxx
收件人始终相同,ID 是收件人拥有的文档。
我想要与 Knex.js 相同的结果甚至更好,但我得到了不同的结果,不知道该怎么做。
我试着让 knex 功能如下
findDocuments(recipientId) {
return this.tx.raw(
`
SELECT
*
FROM
(
SELECT
d.id id,
UNNEST(d.recipients) recipient
FROM
documents d) as result
WHERE
recipient = '${recipientId}';
`
);
}
但这在控制台中给出了不同的结果
{
command: 'SELECT',
rowCount: 0,
oid: null,
rows: [],
fields: [
Field {
name: 'id',
tableID: 19834,
columnID: 1,
dataTypeID: 23,
dataTypeSize: 4,
dataTypeModifier: -1,
format: 'text'
},
Field {
name: 'recipient',
tableID: 0,
columnID: 0,
dataTypeID: 25,
dataTypeSize: -1,
dataTypeModifier: -1,
format: 'text'
}
],
_parsers: [ [Function: parseInteger], [Function: noParse] ],
_types: TypeOverrides {
_types: {
getTypeParser: [Function: getTypeParser],
setTypeParser: [Function: setTypeParser],
arrayParser: [Object],
builtins: [Object]
},
text: {},
binary: {}
},
RowCtor: null,
rowAsArray: false
}
您可能没有执行交易,这取决于您是否或如何调用函数 findDocuments()
。
也尝试将以下函数添加到您的程序中并执行它:
function runTheSQL() {
return findDocuments() // async execution of the query.
.then( function(returnData) {
console.log(returnData); // prints the query results to the console.
});
};
runTheSQL();
您还可以将以下子句添加到您的 knex 语句(在 findDocuments()
函数内)以显示将要执行的实际 SQL。
.on('query', function(data) {
// outputs the SQL query you generated & runtime data bindings.
console.log(data);
})
我正在尝试将在 SQL 脚本编辑器中运行的 PSQL 查询转换为 Knex.js。
我不知道如何得到我的结果我通过 Knex.js 进入数据库查询,我尝试了下面的内容。
Knex.js 查询的结果不是我想要的,我不知道如何获得结果,如下所述。
查询如下
select
*
from
(
select
d.id id,
unnest(d.recipients) recipient
from
documents d) as result
where
recipient = 'xxxx'
此查询从数据库返回的结果为
id | 收件人 |
---|---|
12 | xxx |
22 | xxx |
收件人始终相同,ID 是收件人拥有的文档。 我想要与 Knex.js 相同的结果甚至更好,但我得到了不同的结果,不知道该怎么做。
我试着让 knex 功能如下
findDocuments(recipientId) {
return this.tx.raw(
`
SELECT
*
FROM
(
SELECT
d.id id,
UNNEST(d.recipients) recipient
FROM
documents d) as result
WHERE
recipient = '${recipientId}';
`
);
}
但这在控制台中给出了不同的结果
{
command: 'SELECT',
rowCount: 0,
oid: null,
rows: [],
fields: [
Field {
name: 'id',
tableID: 19834,
columnID: 1,
dataTypeID: 23,
dataTypeSize: 4,
dataTypeModifier: -1,
format: 'text'
},
Field {
name: 'recipient',
tableID: 0,
columnID: 0,
dataTypeID: 25,
dataTypeSize: -1,
dataTypeModifier: -1,
format: 'text'
}
],
_parsers: [ [Function: parseInteger], [Function: noParse] ],
_types: TypeOverrides {
_types: {
getTypeParser: [Function: getTypeParser],
setTypeParser: [Function: setTypeParser],
arrayParser: [Object],
builtins: [Object]
},
text: {},
binary: {}
},
RowCtor: null,
rowAsArray: false
}
您可能没有执行交易,这取决于您是否或如何调用函数 findDocuments()
。
也尝试将以下函数添加到您的程序中并执行它:
function runTheSQL() {
return findDocuments() // async execution of the query.
.then( function(returnData) {
console.log(returnData); // prints the query results to the console.
});
};
runTheSQL();
您还可以将以下子句添加到您的 knex 语句(在 findDocuments()
函数内)以显示将要执行的实际 SQL。
.on('query', function(data) {
// outputs the SQL query you generated & runtime data bindings.
console.log(data);
})