我正在尝试使用脏的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列中的数据填充三个新列。
答案 0 :(得分:1)
这样的事情应该有效(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操作没有任何特殊支持。