MySQL8.0 xdevapi node.js不返回键,仅返回值

时间:2018-08-28 05:06:06

标签: node.js mysql-8.0

我正在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'

3 个答案:

答案 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}
    })