0

MySQLのJSONフィールド内をNoSQLで検索する方法はありますか?つまり、たとえば、フィールドに保存する場合、次の"{name: 'John', surname: 'Doe', age:'30'}"ようVARCHARなもので選択してフィルタリングできますか?

SELECT my_json_field FROM my_table where my_json_field.name = 'John'

よろしく

4

3 に答える 3

1

なぜこれが好きではないのですか?

 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\' %'
于 2012-08-23T12:59:36.620 に答える
0

そのような事はありません。MySQLはJSONを理解せず、正規表現の一致を書き込むか、他の何かが問題を求めているだけです。

于 2012-11-26T11:33:43.957 に答える
0

オペレーターでこのような機能を実装すると、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'」のペアを検索する場合は、特殊文字を処理する方法を見つける必要があります。

于 2012-08-23T13:25:50.213 に答える