有没有一种方法可以在 MySQL 的 JSON 字段中搜索 la NoSQL?我的意思是,如果我存储,比如说,"{name: 'John', surname: 'Doe', age:'30'}"
在一个VARCHAR
字段中,我可以用类似的东西选择和过滤它
SELECT my_json_field FROM my_table where my_json_field.name = 'John'
问候
Why not like this:
SELECT my_json_field FROM my_table where my_json_field LIKE '% name:\'John\' %'
Or more general, depending on the structure of your my_json_field
:
SELECT my_json_field FROM my_table where my_json_field LIKE '% name: \'John\' %'
与操作员一起实施这样的功能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''}'
您可能会注意到我没有在查询中添加“名称”文件名,因为它是一个停用词(在搜索词中被忽略)。
此外,如果要搜索“fieldname: 'value'”对,则必须找到一种处理特殊字符的方法。
哪有这回事。MySQL 只是不会理解 JSON 并且编写正则表达式匹配或其他任何东西都只是自找麻烦。