【问题标题】:MySQL8.0 xdevapi node.js doesn't return keys, only valuesMySQL8.0 xdevapi node.js 不返回键,只返回值
【发布时间】:2019-02-02 15:35:28
【问题描述】:

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

【问题讨论】:

    标签: node.js mysql-8.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 连接器领导开发者。

    【讨论】:

    • 我很害怕。不过,感谢您澄清这一点,我会牢记这一点。
    • 你做得很棒!我希望这个连接器会有一个美好的未来!
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-08
        • 2011-11-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多