如何在 Rails ActiveRecord 中按精确哈希搜索 JSON MySql 字段?
How to search by exact hash in Rails ActiveRecord for JSON MySql field?
我在 MySQL 数据库中有一个 json
类型的字段。该字段包含类似
的值
{
"city_eq": "NewYork",
"rent_true": false,
"estate_type_eq": 0
}
通过传入的哈希值搜索记录的正确方法是什么?像这样:
Link.where(json_fields: {
"city_eq": "NewYork",
"rent_true": false,
"estate_type_eq": 0
})
仅当所有值都相同且显示在字段中时,查询才应 return 一条记录。哈希键的顺序可能不同。
这是与您显示的 JSON 数据相匹配的 SQL 搜索演示:
mysql> create table mytable (json_fields json);
Query OK, 0 rows affected (0.05 sec)
mysql> insert into mytable values ('{
'> "city_eq": "NewYork",
'> "rent_true": false,
'> "estate_type_eq": 0
'> }');
Query OK, 1 row affected (0.02 sec)
mysql> select * from mytable where json_contains(json_fields,
json_object('city_eq', 'NewYork', 'rent_true', false, 'estate_type_eq', 0));
+-----------------------------------------------------------------+
| json_fields |
+-----------------------------------------------------------------+
| {"city_eq": "NewYork", "rent_true": false, "estate_type_eq": 0} |
+-----------------------------------------------------------------+
但是,以这种方式搜索 JSON 必然会导致 table 扫描。如果您想以优化的方式搜索数据,我建议您不要将数据存储在 JSON 中。
我在 MySQL 数据库中有一个 json
类型的字段。该字段包含类似
{
"city_eq": "NewYork",
"rent_true": false,
"estate_type_eq": 0
}
通过传入的哈希值搜索记录的正确方法是什么?像这样:
Link.where(json_fields: {
"city_eq": "NewYork",
"rent_true": false,
"estate_type_eq": 0
})
仅当所有值都相同且显示在字段中时,查询才应 return 一条记录。哈希键的顺序可能不同。
这是与您显示的 JSON 数据相匹配的 SQL 搜索演示:
mysql> create table mytable (json_fields json);
Query OK, 0 rows affected (0.05 sec)
mysql> insert into mytable values ('{
'> "city_eq": "NewYork",
'> "rent_true": false,
'> "estate_type_eq": 0
'> }');
Query OK, 1 row affected (0.02 sec)
mysql> select * from mytable where json_contains(json_fields,
json_object('city_eq', 'NewYork', 'rent_true', false, 'estate_type_eq', 0));
+-----------------------------------------------------------------+
| json_fields |
+-----------------------------------------------------------------+
| {"city_eq": "NewYork", "rent_true": false, "estate_type_eq": 0} |
+-----------------------------------------------------------------+
但是,以这种方式搜索 JSON 必然会导致 table 扫描。如果您想以优化的方式搜索数据,我建议您不要将数据存储在 JSON 中。