вставить json объект с массивом внутри в mysql таблицу, используя node JS - PullRequest
0 голосов
/ 05 февраля 2020

Я использую aws в качестве бэкэнда, и у меня есть несколько aws лямбда-функций (записанных в node JS), которые используются для вставки входящих данных json в базу данных Amazon RDS (mysql). Ниже мой node 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
  ]
}

моя частота имеет массив значений, и я не могу обработать это для вставки в БД , Какие-либо предложения. Спасибо

1 Ответ

1 голос
/ 05 февраля 2020

, если ваши данные находятся в переменной с именем 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
[...]
...