Javascript Knex.js有条件地将数据从一列迁移到其他列

Javascript Knex.js有条件地将数据从一列迁移到其他列,javascript,json,database-migration,knex.js,Javascript,Json,Database Migration,Knex.js,我正在尝试在一个肮脏的MySQL数据库中使用knex.js进行迁移。 因此,有一列包含三种不同数据类型的JSON。 我已经进行了迁移,为这些不同类型的数据创建了三个不同的列 我现在想做的是有条件地将数据从包含JSON的列移动到三个不同的列,以便: 如果类型==A: 迁往新科 否则,如果类型==B: 移到新科 其他: 移到新的颜色 因此,最终这个包含JSON的列应该是空的,并且三个新列应该填充这个JSON列中的数据。类似的内容应该可以工作(): 我没有尝试运行代码,因此可能会有一些错误,但基本

我正在尝试在一个肮脏的MySQL数据库中使用knex.js进行迁移。 因此,有一列包含三种不同数据类型的JSON。 我已经进行了迁移,为这些不同类型的数据创建了三个不同的列

我现在想做的是有条件地将数据从包含JSON的列移动到三个不同的列,以便:

如果类型==A:
迁往新科
否则,如果类型==B:
移到新科
其他:
移到新的颜色

因此,最终这个包含JSON的列应该是空的,并且三个新列应该填充这个JSON列中的数据。

类似的内容应该可以工作():

我没有尝试运行代码,因此可能会有一些错误,但基本原则应该可以工作(我只在postgresql中使用json)


对于knex,您需要使用原始查询来实现这一点,因为它对json操作没有任何特殊支持。

谢谢,我应用了您的答案,结果成功了。较新版本的MySql支持JSON。我确实需要一个原始的查询。
update `MyTable` set `new_col_A` = `old_col` where `old_col`->>'$.type' = 'A';
update `MyTable` set `new_col_B` = `old_col` where `old_col`->>'$.type' = 'B';
update `MyTable` set `new_col_C` = `old_col` where `old_col`->>'$.type' not in ('A', 'B');

-- now check that data was migrated correctly to new columns before setting old column to null
update `MyTable` set `old_col` = NULL;