利用golang将SQL语句转换为mongoDB使用的bson结构
将SQL语句转换为mongoDB使用的bson结构
最近工作中使用的数据库是MongoDB,我使用了多年的MySQL和PostgreSQL,习惯了那种语法,突然间使用mongodb真的不适应,特别是它的条件语句实在是太麻烦了,这种工作明明可以进行再一次简化,否则打一些并且、或者的条件要写很多代码。
所以我特地写了一个包,我使用的是golang,所以这个包也是go语言的包。主要是利用递归的方式转换了 where 条件、order排序和limit,其他的没有做转换,现在我已经用在生产环境。
如果你使用的是 mongo 官方推荐的 go.mongodb.org/mongo-driver/bson 这个包进行mongodb的查询,那么你就可以利用我这个包,以便使用SQL语法转换这些这些烦人的bson结构。
使用方法:
go get github.com/pywee/gobson-where
golang 内引入
import (
where github.com/pywee/gobson-where
)
func main() {
opt := where.Parse(`sku!=123 AND (name=456 OR id=789) AND id!=1 ORDER BY name DESC LIMIT 0,10`)
fmt.Println(opt.Filter)
fmt.Println(opt.Options)
}
以上的写法最终将转换为如下结构存放在 bson 的 filter 里面:
_ = bson.D{
bson.E{Key: "sku", Value: bson.M{"$ne": "123"}},
bson.E{Key: "$or", Value: bson.A{
bson.D{bson.E{Key: "name", Value: 456}},
bson.D{bson.E{Key: "id", Value: 789}},
}},
bson.E{Key: "id", Value: bson.M{"$ne": 1}},
}
针对以上的 SQL 语句中的 limit 关键词,内部同时会设定 options.FindOptions 对象。
limit 0,10 = options.Find().SetSkip(0).SetLimit(10)
针对以上的 SQL 语句中的 order 关键词,内部同时会设定 options.FindOptions 对象。
options.Find().SetSort(bson.D{{"name", -1}})
声明: 因编程语言版本更新较快,当前文章所涉及的语法或某些特性相关的信息并不一定完全适用于您当前所使用的版本,请仔细甄别。文章内容仅作为学习和参考,若有错误,欢迎指正。
开发者
专题·造轮子
Golang·热门
相关文章
-
golang 客户端开发 go-webui
03-27
-
windows wsl 子系统 debian 安装开发环境 (golang派)
09-24
-
运行 Golang 程序的时候报错 git unknown option merged
07-29
-
go-zero 基本使用命令
06-19
-
go1.20版本新特性详解
03-22