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

如何在MySQL X DevAPI查询中直接获取JSON对象数组而非数组数组?

使用MySQL X DevAPI直接获取JSON格式行数据

我正在使用MySQL X DevAPI操作MySQL中的关系表,代码如下:

// Working with Relational Tables
var mysqlx = require('@mysql/xdevapi');
var myTable;

// Connect to server using a connection URL
mysqlx
  .getSession({
    user: 'user',
    password: 'password',
    host: 'localhost',
    port: 33060
  })
  .then(function (session) {
    // Accessing an existing table
    myTable = session.getSchema('test').getTable('my_table');

    // Insert SQL Table data
    return myTable
      .insert(['name', 'birthday', 'age'])
      .values(['Laurie', '2000-5-27', 19])
      .execute()
  })
  .then(function () {
    // Find a row in the SQL Table
    let columns = ['name', 'birthday']
    return myTable
        .select(columns)
        .where('name like :name && age < :age')
        .bind('name', 'L%')
        .bind('age', 30)
        .execute();
  })
  .then(function (myResult) {
    let rows = myResult.fetchAll() // 这是二维数组
    let columns = ['name', 'birthday']
    rows = rows.map((row) => columns.reduce((a, column, index) => Object.assign(a, { [column]: row[index] }), {}))
    console.log(rows); // 转换为JSON对象数组,适合作为WEB API返回值
  });

目前我每次都需要手动将二维数组转换为JSON对象数组:

function (myResult) {
    let rows = myResult.fetchAll() // 这是二维数组
    let columns = ['name', 'birthday']
    rows = rows.map((row) => columns.reduce((a, column, index) => Object.assign(a, { [column]: row[index] }), {}))
    console.log(rows); // 转换为JSON对象数组,适合作为WEB API返回值
}

MySQL X DevAPI作为一款优秀的库,应该有直接获取JSON格式结果的方法。请问在MySQL X DevAPI中,有哪些方法可以直接获取JSON格式的行数据?


直接获取JSON格式行数据的方法

在MySQL X DevAPI的Node.js客户端中,有三种实用方式可以直接获取JSON对象格式的行数据:

  1. 一次性获取所有对象:fetchAllAsObjects()
    结果集对象内置了fetchAllAsObjects()方法,会自动将返回的行转换为以列名为键的对象数组,无需手动处理:

    .then(function (myResult) {
      let rows = myResult.fetchAllAsObjects();
      console.log(rows); // 直接得到JSON对象数组
    });
    

    该方法会自动匹配查询返回的列名,不需要手动传入列名列表。

  2. 逐行获取对象:fetchOneAsObject()
    如果不需要一次性加载所有数据,想要逐行处理,可以使用fetchOneAsObject()方法,每次调用返回一行的对象格式数据:

    .then(function (myResult) {
      let row;
      while ((row = myResult.fetchOneAsObject())) {
        console.log(row); // 单条JSON对象
      }
    });
    
  3. 原生SQL查询结合对象结果
    若偏好写原生SQL,通过会话的sql()方法执行查询后,结果集同样支持fetchAllAsObjects():

    .then(function (session) {
      return session.sql('SELECT name, birthday FROM my_table WHERE name LIKE :name AND age < :age')
        .bind('name', 'L%')
        .bind('age', 30)
        .execute();
    })
    .then(function (myResult) {
      let rows = myResult.fetchAllAsObjects();
      console.log(rows);
    });
    

注意:这些方法需要@mysql/xdevapi的较新版本支持,若当前版本没有,可通过npm update @mysql/xdevapi升级依赖包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 18:03:11