簡體   English   中英

使用 knex.js 和 MySQL 更新塊

[英]Chunk update using knex.js and MySQL

我正在嘗試學習如何使用 knex.js,作為我學習的一部分,我想在我的數據庫上進行一些遷移,我想更新我的一個專欄。 我正在嘗試用塊來做到這一點(我知道這不是最好的解決方案,它僅用於學習目的)。 我正在使用 MySQL。在我的數據庫中,我有一個包含“電子郵件”列的表,其中一些行以“.com”結尾。 我試圖通過省略“.com”來更新此專欄。 在我的代碼中,我 select 相關列,我正在使用破折號庫來分塊我的所有數據。 我的分塊數據如下所示:

我的數據庫:( https://ibb.co/c8kKtcb

第一塊

[

RowDataPacket {id: 1, email: dan@gmail.com},

RowDataPacket {id: 2, email: john@gmail},

RowDataPacket {id: 3, email: steph@gmail},

]

2號塊

[

RowDataPacket {id: 4, email: eric@gmail},

RowDataPacket {id: 5, email: tommy@gmail.com},

RowDataPacket {id: 6, email: bill@gmail.com},

]

3號塊

[

RowDataPacket {id: 7, email: loe@gmail},

RowDataPacket {id: 8, email: helen@gmail.com},

RowDataPacket {id: 9, email: niky@gmail.com},

]

……

這是我的代碼,我嘗試進行更新,但我認為我做錯了什么,因為它的列表 end.update() 方法使用鍵值。 我可以操縱我的數據嗎?

exports.up = async knex => {
  
    const users = await knex("usersWeb")
      .select("id", "email")
      .where("email", "like", "%.com");
  
    const userChunks = _.chunk(users, 3);
    let chunckNumber = 1;
    for (const chunk of userChunks) {
      console.log("Chunck number: ", chunckNumber);
  
      const k = await knex("usersWeb")
        .whereIn(columnId, chunk.map(item => item.id))
        .update("email": ); // this line :(
    }
    chunckNumber++;

}

exports.down = async knex => {};

一段時間后我解決了它,我忘了分享我的解決方案,所以這里是:


exports.up = async knex => {
    const users = await knex("usersWeb")
      .select("id")
      .where("email", "like", "%.com");
  
    const userChunks = _.chunk(users, 3);
    let chunckNumber = 1;
    for (const chunk of userChunks) {
      console.log("Chunck number: ", chunckNumber);
      const tupleOfAllEmailIds = "(" + chunk.map(item => `${item.id}`).join(", ") + ")";
  
      
      const query = `UPDATE "usersWeb" 
        SET "email" = REPLACE("email", ".com", "")
        WHERE id IN ${tupleOfAllEmailIds}
       `;
 
      await knex.raw(query);

    }
    chunckNumber++;

}

exports.down = async knex => {};

暫無
暫無

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

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