2017-07-13 5 views
2

汚れたMySQLデータベースでknex.jsを使用して移行しようとしています。 したがって、3つの異なるタイプのデータを持つJSONがある1つの列があります。 私はすでにこれらの異なるタイプのデータに対して3つの異なる列を作成した移行を行いました。Knex.jsはある列から他の列にデータを条件付きで移行します

は、私が今、何をしたいのか、その三つの異なる列に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と、この列が空であるべきで、3つの新しい列があるべきこのJSON列にあったデータが入力されます。

答えて

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操作を特別にサポートしていないため、生のクエリを使用してこの作業を行う必要があります。

+0

ありがとうございます、私はあなたの答えを適用し、それがうまくいった。新しいバージョンのMySqlはJSONをサポートしています。そして私は本当に生のクエリが必要でした。 – warreee

関連する問題