MySQL8.0 xdevapi node.js 没有 return 键,只有值

MySQL8.0 xdevapi node.js doesn't return keys, only values

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

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

但这returns只是一个值数组。列名称丢失。有没有一种方法可以获得像经典 SQL 数据集中那样的键值对?

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

现在您必须使用 execute() 上的 column metadata available through a second callback 参数构建键值对结构 "by hand"。

像下面这样的东西就可以了:

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 连接器的开发负责人。

在查询中使用 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"} 
 });

这是一个解决方法,可能会对某人有所帮助。

    //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}
    })