1.模糊查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@Override
public List<Student> find(int num, String name, String college, String className, int age, short sex, String partner) {
Query query = new Query();
Criteria criteria =new Criteria();
if(num!=0){
criteria.and("num").is(num);
}
if(name!=null){
criteria.and("name").regex("^.*"+name+".*$");
}
if(className!=null){
criteria.and("className").is(className);
}
if(college!=null){
criteria.and("college").is(college);
}
if(age!=0){
criteria.and("age").is(age);
}
if (sex > 0 && sex < 3) {
criteria.and("sex").is(sex);
}
if(partner!=null){
criteria.and("partner").is(partner);
}
query.addCriteria(criteria);
return mongoTemplate.find(query,Student.class);
}

2.聚合查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
@Override



public List<ClassRequest> calculate() {



//Aggregation.match为条件筛选操作



//Aggregation.group为分组操作



//Aggregation.project为选择结果字段操作



Aggregation aggregation = Aggregation.newAggregation(Aggregation.match(Criteria.where("college").is("计算机学院")),



Aggregation.group("className","college").count().as("count")



.max("age").as("max")



.min("age").as("min")



,Aggregation.project().and("className").as("name").andInclude("college","count","max","min")



);



AggregationResults<ClassRequest> aggregationResults =



mongoTemplate.aggregate(aggregation, Student.class, ClassRequest.class);







return aggregationResults.getMappedResults();



}

3.分页聚合查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
@Override



public List<ClassRequest> findTop() {



//条件筛选操作



AggregationOperation matchOperation = Aggregation.match(Criteria.where("college").is("计算机学院"));



//分组操作



AggregationOperation groupOperation = Aggregation.group("className","college")



.count().as("count")



.max("age").as("max")



.min("age").as("min");



//选择字段操作



AggregationOperation projectOperation = Aggregation.project().and("className").as("name").andInclude("college","count","max","min");



//排序操作



AggregationOperation sortOperation = Aggregation.sort(Sort.Direction.ASC,"name","college");



//跳过条数



AggregationOperation skigOperation = Aggregation.skip(2l);



//选择条数



AggregationOperation limitOperation =Aggregation.limit(1);



//从左到右按顺序操作,注意顺序不一样结果会不一样



//例如先排序后取条数,和先去条数后排序是完全不一样的意思



Aggregation aggregation = Aggregation.newAggregation(matchOperation,groupOperation,projectOperation,



sortOperation,skigOperation,limitOperation);



//查询



AggregationResults<ClassRequest> aggregationResults =



mongoTemplate.aggregate(aggregation, Student.class, ClassRequest.class);



//获取结果集



return aggregationResults.getMappedResults();



}