簡體   English   中英

我使用帶有 Nodejs 的 pg 池從 postgress 數據庫中的 API 中獲取數據。 我在二維數組中獲取數據,每個數組都是蠟燭信息

[英]I fetch data from an API in postgress database using pg pool with Nodejs. I get data in 2D array each array is candle information

這是我收到的數據格式。

[
        [
            1627875900,
            15874.9,
            15876.9,
            15834.65,
            15847.05,
            0
        ],
        [
            1627875960,
            15847.05,
            15853,
            15838.7,
            15853,
            0
        ],
        [
            1627876020,
            15854.25,
            15861.85,
            15853.6,
            15861.05,
            0
        ],
        [
            1627876080,
            15860.35,
            15862.85,
            15856,
            15859.4,
            0
        ]
]

如果我使用循環來存儲它,那么由於異步,訂單會發生變化。 請在這個方向上幫助我如何將每個數組元素作為記錄進行存儲或存儲。

這是我的片段。

const newCandle = response.candles.map(async (element) => {
        await pool.query(
          `INSERT INTO nifty_50 (date, open, high, low, close) VALUES ('${element[0]}', '${element[1]}', '${element[2]}', '${element[3]}', '${element[4]}')`
        );
      });

您有兩種插入數據庫的選項:

  1. 將記錄轉換為展平數組並使用參數
function expand(rowCount, columnCount, startAt=1){
  var index = startAt
  return Array(rowCount).fill(0).map(v => `(${Array(columnCount).fill(0).map(v => `$${index++}`).join(", ")})`).join(", ")
}

// flatten([[1, 2], [3, 4]]) returns [1, 2, 3, 4]
function flatten(arr){
  var newArr = []
  arr.forEach(v => v.forEach(p => newArr.push(p)))
  return newArr
}
const response = {
  candles: [
    [
      1627875900,
      15874.9,
      15876.9,
      15834.65,
      15847.05,
      0
    ],
    [
      1627875960,
      15847.05,
      15853,
      15838.7,
      15853,
      0
    ]
  ]
};

const candles = response.candles.map((v) => ([v[0], v[1], v[2], v[3], v[4]]));

await pool.query(
  `INSERT INTO nifty_50 (date, open, high, low, close) VALUES ${expand(candles.length, 5)}`,
  flatten(candles),
);
  1. 使用 Postgres 插入/選擇查詢(如果所有數組數據都是數字格式)
await pool.query(
  `INSERT INTO nifty_50 (date, open, high, low, close) SELECT t.data[i][1], t.data[i][2], t.data[i][3], t.data[i][4], t.data[i][5] FROM (SELECT $1::NUMERIC[][] AS data) t CROSS JOIN generate_series(1, array_length(t.data, 1)) i`,
  [response.candles],
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM