当前位置:   article > 正文

java对mongo的一些去重、分组聚合、分页查询等操作_aggregation.newaggregation 根据字段去重 java

aggregation.newaggregation 根据字段去重 java

去重:

通过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").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();




声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/56078
推荐阅读
相关标签
  

闽ICP备14008679号