java mongo 去重_java Mongondb聚合函数&去重

1 去重:

2

3 通过distinct方法我们可以对指定字段进行去重,在mysql也有这个关键字

4

5 DBObject query = new BasicDBObject();

6 mongoTemplate.getCollection("collectionName").distinct("去重字段名",query)

7

8

9 分组聚合:

10

11 利用aggregation对字段的不同值数量进行统计,例如如下:

12

13 统计字段为content,别名为value

14

15 Aggregation aggregation = Aggregation.newAggregation(Aggregation.group("Content").count().as("value"));

16 //查询条件

17 Criteria criteria = new Criteria().where("条件一").is("条件一");

18 criteria.and("条件二").is("条件二");

19 aggregation.match(criteria);List maps = mongoTemplate.getCollection("collectionName").aggregate(aggregation);

20

21

22 另一种写法

23

24 Criteria criteria = new Criteria().where("条件一").is("条件一");

25 criteria.and("条件二").is("条件二");

26 Aggregation.sort(sort), Aggregation.limit(10)

27 Aggregation aggregation = Aggregation.newAggregation(Aggregation.match(criteria),Aggregation.group("Content").count().as("value"),Aggregation.sort(sort), Aggregation.limit(10));

28 List pvs =mongoTemplate.aggregate(aggregation, "collectionName", DBObject.class).getMappedResults();

29

30

31 mongo的分页查询:

32

33 直接使用skip()加limit()可以达到分页的效果,但是在数据量大的情况下,此方法性能欠妥

34

35 所有我的优化如下:记录上一次最后一条记录的id,在下一页的查询将其作为一个查询条件,查询大于此id的即可,sort排序设置值为-1表示降序,1为升序。

36

37 DBObject query = new BasicDBObject();

38 query.put("条件一","条件一");

39 DBCursor dbCursor;

40 if(page == 1 || page == 0 || StringUtil.isStrEmpty(lastId)) {

41 dbCursor = mongoTemplate.getCollection(appid).find(query).sort(new BasicDBObject("name", -1)).skip(size * (page - 1)).limit(size);

42 }else{

43 BasicDBObject decoment = new BasicDBObject("$gt",new ObjectId(lastId));

44 query.put("_id",decoment);

45 dbCursor = mongoTemplate.getCollection(appid).find(query).sort(new BasicDBObject("name", -1)).skip(size * (page - 1)).limit(size);

46 }

47 return dbCursor.toArray();

View Code

标签:Mongondb,sort,聚合,java,Aggregation,aggregation,BasicDBObject,new,query

来源: https://www.cnblogs.com/lljboke/p/11367408.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值