【发布时间】:2019-07-31 23:51:39
【问题描述】:
MySQL 5.7.24
假设我有 3 行这样的:
ID (PK) | Name (VARCHAR) | Data (JSON)
--------+----------------+-------------------------------------
1 | Admad | [{"label":"Color", "value":"Red"}, {"label":"Age", "value":40}]
2 | Saleem | [{"label":"Color", "value":"Green"}, {"label":"Age", "value":37}, {"label":"Hoby", "value":"Chess"}]
3 | Daniel | [{"label":"Food", "value":"Grape"}, {"label":"Age", "value":47}, {"label":"State", "value":"Sel"}]
规则 #1:JSON 列是动态的。意味着不是每个人都有相同的结构
规则 #2:假设我不能修改数据结构
我的问题,是否可以查询,以便我可以获得 Age >= 40 的记录的 ID?在本例中为 1 和 3。
附加信息(在被指出为重复之后):如果您查看我的数据,则父容器是数组。如果我像
这样存储我的数据{"Age":"40", "Color":"Red"}
那么我可以简单地使用
Data->>'$.Age' >= 40
我目前的想法是使用存储过程来循环数组,但我希望我不必走那条路。第二种选择是使用正则表达式(我也不希望这样)。如果您认为“JSON 搜索”是解决方案,请指出是哪一个(或我这个菜鸟的一些示例)。文档过于笼统,无法满足我的特定需求。
【问题讨论】:
-
另见manual中的JSON搜索功能
-
为什么要将 JSON 打包到数据库中而不是使用表、列和行?
-
看起来它让事情变得更难,而不是更简单。不要偷工减料;从长远来看,它会总是咬你。
-
JSON 使插入数据变得更容易,但显然它使选择数据变得更加复杂。您正在进行权衡,如果不询问 Stack Overflow,您无法弄清楚如何选择数据,这意味着这不是一个好的权衡。