因为业务从 mongodb 迁移到 mysql5.7,有一些 mongo 特殊的查询就需要修改。
想做到尽可能少改代码,并且需要支持 mongodb 的 $eleMatch 查询 (感觉难得不行)
CREATE TABLE `Student` (
`id` bigint AUTO_INCREMENT PRIMARY KEY,
`name` varchar(64),
`gender` varchar(32),
`data` json DEFAULT NULL
)
上面是简化后的表结构,实际上字段很丰富。主要是 data 字段是 JSON 格式,
大概长这样:
[
{"date":"2021-01-01", "is_active": true, "tags":["A", "B", "C", "D"]},
{"date":"2021-06-01", "is_active": false, "tags":["C", "D"]},
]
想查询如下:
名字为 “小明”,性别为“女”,
data.date 在 2020-08-01 到 2020-05-01 之间,
并且 is_active 为 true,
tags 中含有"C" 和 "D"的 -- 这个可以通过读到内存后过滤
查了一下午,试用了各种 json_extract 类似的函数,都没办法做到 [数组内的 Object 同时满足多个条件]
网上还有说用 mysql8.0 自带的 json_table 函数,,目前还没有测试,不知道能不能见索引。
求有经验的老哥说一下,跪谢跪谢跪谢跪谢跪谢跪谢跪谢
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.