如何在 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 中。