MySQLのJSONフィールド内をNoSQLで検索する方法はありますか?つまり、たとえば、フィールドに保存する場合、次の"{name: 'John', surname: 'Doe', age:'30'}"
ようVARCHAR
なもので選択してフィルタリングできますか?
SELECT my_json_field FROM my_table where my_json_field.name = 'John'
よろしく
なぜこれが好きではないのですか?
SELECT my_json_field FROM my_table where my_json_field LIKE '% name:\'John\' %'
my_json_field
または、より一般的には、 :の構造によって異なります。
SELECT my_json_field FROM my_table where my_json_field LIKE '% name: \'John\' %'
そのような事はありません。MySQLはJSONを理解せず、正規表現の一致を書き込むか、他の何かが問題を求めているだけです。
オペレーターでこのような機能を実装すると、like
パフォーマンスが低下する可能性があります。この目的には、の代わりにMySQL全文like
検索を使用することをお勧めします。
create table my_table (my_json_field text);
ALTER TABLE my_table ADD FULLTEXT(my_json_field);
insert into my_table (my_json_field) values ("{name: 'John', surname: 'Doe', age:'30'}");
insert into my_table (my_json_field) values ("{name: 'Pope', surname: 'Benedict', age:'666'}");
select *
from my_table
where MATCH(my_json_field) AGAINST ("Pope" IN BOOLEAN MODE);
'{name: ''Pope'', surname: ''Benedict'', age:''666''}'
select *
from my_table
where MATCH(my_json_field) AGAINST ("John" IN BOOLEAN MODE);
'{name: ''John'', surname: ''Doe'', age:''30''}'
'name' filednameはストップワードであるため(検索語では無視されます)、クエリに'name'filednameを追加しなかったことにお気づきかもしれません。
また、「fieldname:'value'」のペアを検索する場合は、特殊文字を処理する方法を見つける必要があります。