1

在 node.js 服务器(X DevAPI)上使用 MySQL 8.0,我正在尝试使用

var res = session.sql('SELECT * FROM users').execute(function (row) {
  console.log(row); // [1,'foo','bar']
});

但这仅返回一个值数组。缺少列名。有没有一种方法可以获得键值对,例如经典 SQL 数据集中的键值对?

IEid: 1, fName: 'foo', lName: 'bar'

4

3 回答 3

2

现在,您必须使用通过第二个回调参数 on提供的列元数据“手动”构建键值对结构。execute()

像下面这样的东西可以解决问题:

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 连接器领导开发者。

于 2018-08-28T08:08:53.507 回答
1

在查询中使用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"} 
 });
于 2019-01-24T19:11:22.953 回答
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}
    })
   
于 2020-08-23T03:01:50.627 回答