首页 Golang

利用golang将SQL语句转换为mongoDB使用的bson结构

pyweeX 发布于 08-01
Golang
pyweeX

将SQL语句转换为mongoDB使用的bson结构

最近工作中使用的数据库是MongoDB,我使用了多年的MySQL和PostgreSQL,习惯了那种语法,突然间使用mongodb真的不适应,特别是它的条件语句实在是太麻烦了,这种工作明明可以进行再一次简化,否则打一些并且、或者的条件要写很多代码。

所以我特地写了一个包,我使用的是golang,所以这个包也是go语言的包。主要是利用递归的方式转换了 where 条件、order排序和limit,其他的没有做转换,现在我已经用在生产环境。

如果你使用的是 mongo 官方推荐的 go.mongodb.org/mongo-driver/bson 这个包进行mongodb的查询,那么你就可以利用我这个包,以便使用SQL语法转换这些这些烦人的bson结构。

使用方法:

  1. go get github.com/pywee/gobson-where

golang 内引入

  1. import (
  2. where github.com/pywee/gobson-where
  3. )
  4. func main() {
  5. opt := where.Parse(`sku!=123 AND (name=456 OR id=789) AND id!=1 ORDER BY name DESC LIMIT 0,10`)
  6. fmt.Println(opt.Filter)
  7. fmt.Println(opt.Options)
  8. }
以上的写法最终将转换为如下结构存放在 bson 的 filter 里面:
  1. _ = bson.D{
  2. bson.E{Key: "sku", Value: bson.M{"$ne": "123"}},
  3. bson.E{Key: "$or", Value: bson.A{
  4. bson.D{bson.E{Key: "name", Value: 456}},
  5. bson.D{bson.E{Key: "id", Value: 789}},
  6. }},
  7. bson.E{Key: "id", Value: bson.M{"$ne": 1}},
  8. }
针对以上的 SQL 语句中的 limit 关键词,内部同时会设定 options.FindOptions 对象。
  1. limit 0,10 = options.Find().SetSkip(0).SetLimit(10)
针对以上的 SQL 语句中的 order 关键词,内部同时会设定 options.FindOptions 对象。
  1. options.Find().SetSort(bson.D{{"name", -1}})

项目地址:
https://github.com/pywee/gobson-where

声明: 因编程语言版本更新较快,当前文章所涉及的语法或某些特性相关的信息并不一定完全适用于您当前所使用的版本,请仔细甄别。文章内容仅作为学习和参考,若有错误,欢迎指正。

讨论 支持 Markdown 语法 点击演示
回复
评论预览框

开发者

开发者·注册登录
  • 获取验证码
  • 取消