java对mongo的一些去重、分组聚合、分页查询等操作 |
您所在的位置:网站首页 › criteria查询去重 › java对mongo的一些去重、分组聚合、分页查询等操作 |
去重: 通过distinct方法我们可以对指定字段进行去重,在mysql也有这个关键字 DBObject query = new BasicDBObject(); mongoTemplate.getCollection("collectionName").distinct("去重字段名",query)
分组聚合: 利用aggregation对字段的不同值数量进行统计,例如如下: 统计字段为content,别名为value Aggregation aggregation = Aggregation.newAggregation(Aggregation.group("Content").count().as("value")); //查询条件 Criteria criteria = new Criteria().where("条件一").is("条件一");criteria.and("条件二").is("条件二"); aggregation.match(criteria);List maps = mongoTemplate.getCollection("collectionName").aggregate(aggregation);
另一种写法 Criteria criteria = new Criteria().where("条件一").is("条件一");criteria.and("条件二").is("条件二");Aggregation.sort(sort), Aggregation.limit(10)Aggregation aggregation = Aggregation.newAggregation(Aggregation.match(criteria),Aggregation.group("Content").count().as("value"),Aggregation.sort(sort), Aggregation.limit(10));List pvs =mongoTemplate.aggregate(aggregation, "collectionName", DBObject.class).getMappedResults();
mongo的分页查询: 直接使用skip()加limit()可以达到分页的效果,但是在数据量大的情况下,此方法性能欠妥 所有我的优化如下:记录上一次最后一条记录的id,在下一页的查询将其作为一个查询条件,查询大于此id的即可,sort排序设置值为-1表示降序,1为升序。 DBObject query = new BasicDBObject(); query.put("条件一","条件一"); DBCursor dbCursor; if(page == 1 || page == 0 || StringUtil.isStrEmpty(lastId)) { dbCursor = mongoTemplate.getCollection(appid).find(query).sort(new BasicDBObject("name", -1)).skip(size * (page - 1)).limit(size); }else{ BasicDBObject decoment = new BasicDBObject("$gt",new ObjectId(lastId)); query.put("_id",decoment); dbCursor = mongoTemplate.getCollection(appid).find(query).sort(new BasicDBObject("name", -1)).skip(size * (page - 1)).limit(size); } return dbCursor.toArray();
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |