You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将MySQL XDevAPI查询结果转为键值对格式?

将@mysql/xdevapi查询结果从二维数组转为键值对数组

@mysql/xdevapi默认返回的查询结果是二维数组,要转成键值对(对象)数组,你可以利用结果集对象提供的列名方法来实现映射:

核心思路

查询结果对象的getColumnNames()方法可以获取当前结果的所有列名,结合数组的map和reduce(或Object.fromEntries)就能把每一行数组转成对应列名的对象。

方法一:兼容低版本Node.js的写法

如果需要兼容Node.js 12以下版本,用reduce来构建对象:

.then(function (myResult) {
  // 获取列名列表
  const columnNames = myResult.getColumnNames();
  // 将二维数组转成对象数组
  const resultObjects = myResult.fetchAll().map(row => {
    return columnNames.reduce((obj, colName, index) => {
      obj[colName] = row[index];
      return obj;
    }, {});
  });
  console.log(resultObjects);
});

方法二:简洁写法(Node.js 12+)

Node.js 12及以上版本支持Object.fromEntries,可以用更简洁的代码实现:

.then(function (myResult) {
  const columnNames = myResult.getColumnNames();
  const resultObjects = myResult.fetchAll().map(row => 
    Object.fromEntries(columnNames.map((name, idx) => [name, row[idx]]))
  );
  console.log(resultObjects);
});

完整示例代码

替换原代码中处理结果的部分,完整代码如下:

var mysqlx = require('@mysql/xdevapi');
var myTable;

mysqlx.getSession({
  user: 'user',
  password: 'password',
  host: 'localhost',
  port: 33060
}).then(function (session) {
  myTable = session.getSchema('testdb').getTable('test-table');
  return myTable.insert(['name', 'birthday', 'age'])
    .values(['Laurie', '2000-5-27', 19])
    .execute()
}).then(function () {
  return myTable.select().execute();
}).then(function (myResult) {
  const columnNames = myResult.getColumnNames();
  const resultObjects = myResult.fetchAll().map(row => 
    Object.fromEntries(columnNames.map((name, idx) => [name, row[idx]]))
  );
  console.log(resultObjects);
});

执行后就能得到你期望的键值对数组格式。

内容的提问来源于stack exchange,提问作者Alagusundaram R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 07:07:43