mysql - 如何按 DC2Type:json_array 子字段排序
问题描述
我正在一个现有的应用程序中工作,我被要求按 Symfony 中 DC2Type:json_array 字段的子字段排序。通常我会将字段添加为表中的列。在这种情况下,这是不可能的。
我们有一个JsonSerializable
invoice
具有普通date
属性的实体。但也是一个data
包含due_date
. 我想data[due_date]
在 Symfony 查询中订购。这是可能吗?
解决方案
tl;博士:不,不是真的。
根据Doctrine 的类型映射矩阵,json_array
被映射到 MySQL 的MEDIUMTEXT
列类型,默认情况下显然不会将其内容索引为 json,因此几乎没有性能优势。(此外,AFAICT,除了将 db json 从和转换为 php 数组/空值之外,不提供任何 json 功能)
也许你可以神奇地做一些字符串搜索魔法来提取一个值来排序,但你仍然无法获得适当索引提供的性能提升。根据您的数据,这可能会变得非常慢(并且吃掉内存)。
JSON 数据类型对于关系数据库世界来说是相当“新”的,并且像学说这样的映射器还没有完全采用它。扩展学说来处理这种数据类型可能需要做很多工作。相反,您可以重新考虑您的表架构,以将所有字段包含为您想要排序的列,以使用关系数据库提供的所有好处(如索引)。
推荐阅读
- mysql - 也许如何从选择中选择
- c# - C#串行数据被分成随机数量,试图找到回车没有运气
- docker - 无法通过覆盖网络跨 2 个节点正确通信
- mysql - 如何在 MySQL 中查询此 JSON 有效负载?
- homebrew - 将 OpenCV 与 DarkNet 一起使用时出错 - 为自己的数据集生成锚点
- omnet++ - OMNET++:如何创建每秒触发的计时器事件?
- sql-server - SQL Server 时态表不保留删除历史记录以在事务中进行更新和删除
- excel - Excel-vba将不同的工作表保存到不同文件夹中的PDF
- clang - 在 Travis CI 上为 C++17 设置 Clang
- python - Keras 模型 (RNN) 预测 Floydhub 上的奇怪输出