簡體   English   中英

用 Node 標准替換字符串(無查詢)Sequelize

[英]Replace string with Node standard (no query) Sequelize

我有通過 Sequelize 使用 MariaDB (MySQL) 的節點服務器。
我的數據庫中有一些行看起來像這樣,例如:

ID 剪輯
1個 ["videoId123456","videoId8910111213"]
2個 [“videoId123456”]
3個 []
4個 [“videoId123456”]

“剪輯”列是一個字符串,但在數組結構中。

我的任務是找到一種方法從剪輯列中刪除特定的 videoId。 例如,如果 API 路由獲得 Id“videoId123456”,則它將從第 1、2、4 行中刪除。 如果它獲得 Id“videoId8910111213”,它將從第 1 行中刪除。

我知道如何通過純 MySQL 來做到這一點,例如:

UPDATE player
SET clips = REPLACE(clips ,'"videoId1234567"','')
WHERE clips LIKE '%"videoId1234567"%';

我知道我可以使用 Sequelize 作為字符串運行純 SQL 命令,例如:

await sequelize.query(
`   UPDATE player
    SET clips = REPLACE(clips ,'"videoId1234567"','')
    WHERE clips LIKE '%"videoId1234567"%';
`, {
  type: QueryTypes.UPDATE
});

但我想知道是否有任何方法可以通過純 Sequelize 來做到這一點,例如:

player.update({
  'clips': 'clips.replace('"videoId1234567"','')'
   where: { 'clips': [Op.like]: '"videoId1234567"' }
});

謝謝。

您可以使用Sequelize.fn amd Sequelize.col來實現使用replace SQL function 的目標:

player.update({
  clip: Sequelize.fn('replace', Sequelize.col('clip'), '"videoId1234567"','')
}, {
   where: { clip: { [Op.like]: '"videoId1234567"' } }
});

PS 最好不要只替換這個類似 JSON 的數組中的子字符串,而更喜歡使用可以與 JSON 一起使用的 SQL 函數來處理數組(如果它適用於 MariaDB)。

暫無
暫無

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

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