我正在node.js服务器(X DevAPI)上使用MySQL 8.0,我正在尝试通过
获取数据var res = session.sql('SELECT * FROM users').execute(function (row) {
console.log(row); // [1,'foo','bar']
});
,但这仅返回一个值数组。列名称丢失。有没有办法获得经典SQL数据集中的键值对?
即id: 1, fName: 'foo', lName: 'bar'
答案 0 :(得分:1)
现在,您将不得不使用column metadata并通过execute()
上的第二个callback参数“手动”构造键-值对结构。
可以通过以下方式达到目的:
var result = []
session.sql('SELECT 1 AS id, "foo" AS fName, "bar" AS lName')
.execute(row => {
row.forEach((value, i) => { result[i] = Object.assign({}, result[i], { value }) })
}, columns => {
columns.forEach((key, i) => { result[i] = Object.assign({}, result[i], { key: key.getColumnName() }) })
})
console.log(result.reduce((res, pair) => Object.assign(res, { [pair.key]: pair.value }), {}))
我必须承认这是令人费解的,并且已经使它变得更好了。
免责声明:我是X DevAPI连接器负责人。
答案 1 :(得分:0)
在查询中使用JSON_OBJECT函数。
var res = session.sql("select JSON_OBJECT('id', id, 'name', name) from users").execute(function (row) {
console.log(row); // {"id": 87, "name": "rui"}
});
答案 2 :(得分:0)
这是一个变通办法,可能会对某人有所帮助。
//This is declared outside of class
const mapTest = (row) =>{
return{
id:row[0],
price:row[1]
}
}
//This where you get the result.
.execute()
.then(myResult =>{
let myRows = myResult.fetchAll();
resolve(myRows.map(row=>mapTest(row))); // returns {"id":1,"price":200000},{"id":2,"price":300000}
})