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

本文分享了在项目中使用MongoDB的心得,详细介绍了如何进行数据查询与聚合操作,包括match、group、sort等功能的使用,以及如何实现分页查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

           SQL                                              MongoDB

       

需要注意的是,MongoDB有一个管道的概念,相当于一层一层的过滤,顺序不能乱,否则会报错(A pipeline stage specification object must contain exactly obe field)。这其实和我们在用sql语句查询时候是一样的,都是select.....where....group by....order by....limit...顺序不能乱是一样的。

// 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<DBObject> queryList = new ArrayList<>();
queryList .add(match);
queryList .add(group);
queryList .add(sort);
queryList .add(skip);
queryList .add(limit);

AggregateIterable<Document> 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/

     

   

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值