最近公司要写一个项目,其中一个需求就是前端用户选择查询条件。
就是要做一个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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。