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

11 篇文章 0 订阅
1 篇文章 0 订阅

利用Golang将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}})

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值