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

Knex.js migrate data from one column to others conditionally

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

我现在想做的是有条件地将数据从带有 JSON 的列移动到三个不同的列,以便: if type == A: move to new_col_A else if type == B: move to new_col_B else: move to new_col_C 所以最终这个带有 JSON 的列应该是空的,三个新列应该填充这个 JSON 列中的数据。

像这样的东西应该可以工作 (https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#operator_json-inline-path):

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;

我没有尝试 运行 代码,所以它可能有一些错误,但基本原理应该有效(我一直在 json 只使用 postgresql)。

对于 knex,您需要使用原始查询来使其正常工作,因为它没有对 json 操作的任何特殊支持。