去重:
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<Map> 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<DBObject> 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
java Mongondb聚合函数&去重
标签:img tco 聚合 size isp str etc hide content