java中mongodb常用的aggregate聚合查询操作

      最近因为项目需要,用到了MongoDB,之前只用过关系型数据库,第一次项目中用到,有一点点心得和收获,记录一下。

MongoDB 是一种文档型数s库,里面分为数据库(DBs)和集合(Collections),分别相当于SQL的数据库和数据表。数据

因为本次业务原因,做的都是查询操作,没有增删改等操作。(比较简单,看下就会了,哈哈)

           SQL                                              MongoDB

       java中mongodb常用的aggregate聚合查询操作_第1张图片

需要注意的是,MongoDB有一个管道的概念,相当于一层一层的过滤,顺序不能乱,否则会报错(A pipeline stage specification object must contain exactly obe field)。

// match(相当于 WHERE 或者 HAVING )
BasicDBObject query= new BasicDBObject();
BasicDBObject[] array = { new BasicDBObject("time", new BasicDBObject("$gte", "2018-09-12")),new BasicDBObject("time", new BasicDBObject("$lte","2018-12-25"))};
query.append("$and", array);
BasicDBObject match = new BasicDBObject("$match", query); 

//group(相当于 GROUP BY)
BasicDBObject group = new BasicDBObject("$group", new BasicDBObject("_id", "$subject")
            .append("count", new BasicDBObject("$sum", 1)));

//sort(排序)
BasicDBObject sort = new BasicDBObject("$sort", new BasicDBObject("count", -1));//1:正序,-1倒序

//skip(跳过前面多少条数据,分页时使用)
//limt(只要前多少条数据,分页时使用)
BasicDBObject limit = new BasicDBObject("$limit", pageSize);
BasicDBObject skip = new BasicDBObject("$skip", (pageNo - 1) * pageSize);

//queryList集合里的顺序不能乱,否则会报错。

List queryList = new ArrayList<>();
queryList .add(match);
queryList .add(group);
queryList .add(sort);
queryList .add(skip);
queryList .add(limit);

AggregateIterable iterable = mongoClient.mongoClient.getDatabase(dbName).getCollection(gatherName).aggregate(queryList );

    上面的代码就是进行聚合后的操作,查询出的集合里有(_id,count)两个字段,_id对应的值就是subject,count对应的值是总数,这样我们就可以查出结果了,并且进行了分页操作,只需要传入相应pageNo和pageSize就可以了。

由于水平有限,有错误的地方请大家指正。

最后附上 MongoDB的官方API地址:https://docs.mongodb.com/manual/reference/sql-aggregation-comparison/

     

   

 

你可能感兴趣的:(MongoDB)