• java mongodb 并表 group 查询 Bson


    mongodb的使用中,需要将发生额表occr+期初表open表,进行union的并表操作后,再进行group,sum,排序,分页操作。

    查询了一番后,mongodb4.4版本后,新增了一个管道符,$unionWith,可以进行类似于sql里的union动作。

    我原来的写法,是使用Aggregation,Criteria的类进行构造,然后使用mongotemplate进行查询,奈何寻找了一番,没有在Aggregation里找到,对应unionWith的构造方法。于是,只能转换写法,用最自由,类客户端查询的写法去写,如何读者们知道对应的unionWith构造方法,烦请评论区告知下。

    其实mongodb的查询,写熟练了之后,还是挺简单的。

    基本上就是这种写法,一系列动作,就是一个数组,每个动作用一个json对象进行包裹。

    [{},{},{}]

    如果有and 和or的复杂组合查询,就是使用

    1. {"$or":[{filed1:值1,filed2:值1...},{filed1:值2,filed2:值2...}]}
    2. {"$and":[{"$or":...}]}

    这种多层级的json去操作,唯一要注意点的,就是层级关系而已。

    本质就是json对象+数组的嵌套。

    这里讲下unionWith的写法。

    客户端的语句里,是如下形态

    1. {
    2. $unionWith:{
    3. "coll":"你要合并的集合名称",
    4. //要合并之前对这张新加入的表的一系列操作
    5. "pipeline":[{
    6. $match:{要合并之前对这张新加入的表的操作}
    7. },{
    8. $project:{}
    9. }]
    10. }
    11. }

    最好是在客户端实验过正确结果之后,再去转换成bson。

    在客户端我们写查询,键没有带双引号,写json语句的时候,无所谓,都带上问题不大这里贴一下我在java组装union的写法

    1. import org.bson.Document;
    2. List<Document> conditions = new ArrayList<>();
    3. Document matchDoc = Document.parse("和客户端一样的查询json字符串");
    4. conditions.add(matchDoc);
    5. AggregateIterable<Document> resultSet =
    6. mongoTemplate.getCollection(collectionName).aggregate(conditions);

    主要就是使用了MongoCollection接口的下列方法

    AggregateIterable<TDocument> aggregate(Listextends Bson> var1);

    最后,贴一下,这种写法,对查询出来数据的处理。

    1. try (MongoCursor<Document> cursor = resultSet.iterator()) {
    2. while (cursor.hasNext()) {
    3. JsonObject itemObj = gson.fromJson(cursor.next().toJson(), JsonObject.class);
    4. }
    5. }

    这里我主要是将查出来的document结果,转为了json字符串,再转回我习惯性使用的Gson工具包里的对象,主要是个人觉得这个Document对象太难用了,当然你也可以使用别的json工具包去转为你熟悉的json对象(在java里)

  • 相关阅读:
    Nacos注册中心的部署与用法详细介绍
    uni-app 蓝牙打印, CPCL指令集使用
    C. Binary String(思维+贪心)
    Fabric.js 拖拽平移画布
    SphereEx苗立尧:云原生架构下的Database Mesh研发实践
    FITC荧光素标记角叉菜胶;Carrageenan-FITC ;FITC-Carrageenan
    有人开源全凭“为爱发电”,有人却用开源“搞到了钱”
    C语言:空指针野指针
    【Selenium & Other】一键摸鱼 & 一键采集数据
    Web3游戏基础设施提供商Stardust为Sui上的游戏开发者提供支持
  • 原文地址:https://blog.csdn.net/rgbhi/article/details/133418130