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

时间:2017-07-13 10:21:38

标签: javascript json database-migration knex.js

我正在尝试使用脏的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列中的数据填充三个新列。

1 个答案:

答案 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操作没有任何特殊支持。