java对mongo的一些去重、分组聚合、分页查询等操作
2017-06-20 20:48
555 查看
去重:
通过distinct方法我们可以对指定字段进行去重,在mysql也有这个关键字
分组聚合:
利用aggregation对字段的不同值数量进行统计,例如如下:
统计字段为content,别名为value
另一种写法
4000
.count().as("value"),Aggregation.sort(sort), Aggregation.limit(10));
List<DBObject> pvs =mongoTemplate.aggregate(aggregation, "collectionName", DBObject.class).getMappedResults();
mongo的分页查询:
直接使用skip()加limit()可以达到分页的效果,但是在数据量大的情况下,此方法性能欠妥
所有我的优化如下:记录上一次最后一条记录的id,在下一页的查询将其作为一个查询条件,查询大于此id的即可,sort排序设置值为-1表示降序,1为升序。
通过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<Map> 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")
4000
.count().as("value"),Aggregation.sort(sort), Aggregation.limit(10));
List<DBObject> 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();
相关文章推荐
- 关于JAVA的分页查询操作技术
- mongo中的高级查询之聚合操作(distinct,count,group)
- JAVA 8 StreamAPI 和 lambda表达式 总结(四)--stream的一些聚合操作
- 关于JAVA的分页查询操作技术
- 关于JAVA的分页查询操作技术
- java中分页查询操作
- mongo 聚合操作 Java中代码
- C# MongoDB 查询,分组,聚合,排序,条件,分页
- 什么是数据库?数据库的作用想学数据库必看 (3)数据库操作 排序, 聚合函数 ,分组查询,分页查询,模糊查询,数据完整性
- java使用mongo数据库,怎么根据两列进行分组统计并分页
- 关于JAVA的分页查询操作技术
- 【Oracle】day04_子查询_分页查询_DECODE_排序_集合操作_高级分组
- [数据库]MongoTemplate之分组分页复合条件查询
- jdbc结合sqlserver的javaWeb工程的分页查询共通操作代码
- java 操作mongo, 查询语句
- Java操作MongoDB模糊查询和分页查询
- mongo分组聚合(sum)在java中的用户:Aggregation agg = newAggregation();
- 使用MongoTemplate管理MongoDB的一些查询操作(Java)
- Java通过mongo-java-driver-3.0+分页查询mongodb详解
- C# MongoDB 查询,分组,聚合,排序,条件,分页