使用节点 JS 将带有数组的 json 对象插入到 mysql table 中

insert json object with array inside into mysql table using node JS

我使用 aws 作为我的后端,我有几个 aws lambda 函数(用节点 JS 编写)用于将传入的 json 数据插入到 amazon RDS(mysql) DB。下面是我的节点 js 代码

var mysql = require('mysql');
var config = require('./config.json');
var pool = mysql.createPool({.../});

exports.handler = (event, context, callback) => {
  let inserts = [event.unitID, event.timestamp, event.frequency];
  pool.getConnection(function(error, connection) {
    connection.query({
      sql: 'INSERT INTO device_data (device_id, timestamp, frequency) VALUES (?, ?, ?);',
      timeout: 40000, 
      values: inserts
    }, function(error, results, fields) {
      connection.release();
      if (error) callback(error);
      else callback(null, results);
    });
  });
};

这是传入的json数据

"unitID": "arena-MXHGMYzBBP5F6jztnLUdCL",
  "timestamp": 1580915318000,
  "version": "1.0.0",
  "frequency": [
    60.0033,
    60.004,
    60.0044,
    60.0032,
    60.005,
    60.005,
    60.0026,
    60.0035,
    60.0036,
    60.0053
  ]
}

我的频率有值数组,我无法处理它以插入数据库。 有什么建议么。谢谢

如果您的数据位于名为 json 的变量中:

console.log(json.frequency.map( (freq) =>[json.unitID,json.timestamp,freq] ))

然后您可以调整它以使您的 sql 适合用您想要的输出替换 VALUES (?,?,?) 的字符串。例如:

const values = json.frequency.map( (freq) => [json.unitID,json.timestamp,freq] );
const sqlString = `'INSERT INTO device_data (device_id, timestamp, frequency) VALUES ${values.map( (row) => `(${row[0]},${row[1]},${row[2]})` ).join(',')}`

在您的代码中:

connection.query({
      sql:sqlString
[...]