如何将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
相关产品推荐
相关产品推荐

