关于sql的where语句转Mongo - 简书

来源: 关于sql的where语句转Mongo – 简书

最近公司要写一个项目,其中一个需求就是前端用户选择查询条件。

就是要做一个SQL转Mongo的方法,开始觉得简单,一上手就不觉得简单了,最开始想着自己来组装,但是发现好像自己能力有限确实手写不出来转换的方法,后来查遍了网上的资料,都只是转换单个SQL语句,不符合业务逻辑啊,就只有想其他办法。

最开始就是用sql自带的那个转换的方法,但是转换出来并没有什么用,还是拼接不出方法。

后来看到geoserver上有个动态转sql的功能,然后就去下载了geotools的所有的依赖,然后反编译出来看源码,但是源码是看到了,也看到了实现的一些过程,但是太麻烦了,没看到能直接调用geotools的入口,这个方法也是作罢了。

后来我去github上面看解决方案,看到一个大神写了一个工具类,真的牛逼!

github地址我忘记了,实在是太不应该了,希望能帮到正在被这个折磨的人。

<dependency>

    <groupId>com.github.vincentrussell</groupId>

    <artifactId>sql-to-mongo-db-query-converter</artifactId>

    <version>1.10</version>

</dependency>

String sql = “select column1 from my_table where xxx<50 and yyy>50” ;

QueryConverter queryConverter = new QueryConverter(sql);

MongoDBQueryHolder mongoDBQueryHolder = queryConverter.getMongoQuery();

Document query = mongoDBQueryHolder.getQuery();

String mongsql = query.toJson();//转好的sql转mongo语句,注意这里序列化了

Document d = org.bson.Document.parse(mongsql);

String js = com.mongodb.util.JSON.serialize(d);

Bson bson = BsonDocument.parse(js);

FindIterable findIterable = collection.find(bson).projection(document).limit(limit).skip(skip);//sql查询

MongoCursor cursor1 = findIterable.iterator();

以上就是实现的方式。希望能帮到人。

作者:ychl1
链接:https://www.jianshu.com/p/19e2ef4868ee
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏