有没有办法可以在MySQL的NoSQL中搜索JSON字段?
我的意思是,如果我在"{name: 'John', surname: 'Doe', age:'30'}"
字段中存储VARCHAR
,我可以选择并使用类似
SELECT my_json_field FROM my_table where my_json_field.name = 'John'
此致
答案 0 :(得分: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\' %'
答案 1 :(得分:0)
使用like
运算符实现此类功能可能会降低性能。我建议使用MySQL fulltext搜索而不是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''}'
您可能会注意到我没有在查询中添加“名称”字段名称,因为它是stopword(在搜索字词中会被忽略)。
此外,如果要搜索“fieldname:'value'”对,则必须找到处理特殊字符的方法。
答案 2 :(得分:0)
没有这样的事情。 MySQL只是不了解JSON并编写正则表达式匹配或其他任何东西只是在寻找麻烦。