[英]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.