MySQL WHERE是一种NoSQL风格

时间:2012-08-23 12:57:36

标签: mysql select nosql where

有没有办法可以在MySQL的NoSQL中搜索JSON字段? 我的意思是,如果我在"{name: 'John', surname: 'Doe', age:'30'}"字段中存储VARCHAR,我可以选择并使用类似

的内容对其进行过滤
SELECT my_json_field FROM my_table where my_json_field.name = 'John'

此致

3 个答案:

答案 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并编写正则表达式匹配或其他任何东西只是在寻找麻烦。