简介
部分同学不熟悉 mongodb 的查询语法,为了降低入门门槛,今天专门提供了转换类。
已经为大家准备好了 web 版接口: 在线测试
使用方法
// params 支持 ? 和 #{name} 占位符
MongoAggregateBuilder.makPipeline(@NonNull String sql, Object... params)
例1(普通sql)
select
(case type when 1 then value1 when 2 then value2 else 0 end) as t,
count(*) as c
from table
where date > str_to_date('2019-04-07', '%Y-%m-%d')
group by t
having c > 10
order by c desc
输出 Aggregate:
[
{"$match":{"date":{"$gt":{"$date":"2019-04-06T16:00:00Z"}}}},
{"$group":{"_id":{"t":{"$cond":{"if":{"$eq":["$type",1]},"then":"$value1","else":{"$cond":{"if":{"$eq":["$type",2]},"then":"$value2","else":0}}}}},"c":{"$sum":1}}},
{"$project":{"_id":0,"t":"$_id.t","c":1}},
{"$match":{"c":{"$gt": 10}}},
{"$sort":{"c":-1}}
]
更多Demo 请阅读原始文章 https://sybn.gitee.io/sybn-util/2019/04/07/sql_query-convert-mongo_aggregate/
注意事项
mongo 只能支持 select 和 from 子查询, 无法支持 where 子查查询 和 join
此工具类暂时不支持加减乘除运算
mongo对数据类型敏感,MySQL 中的 date > str_to_date(‘2019-04-07’, ‘%Y-%m-%d’) 可以写为 date > ‘2019-04-07’ 但 mongo 不可以。
web 版