mongodb操作

1
2
3
4
5
6
7
8
Criteria cri = Criteria.where("schoolId").is(gxyJobEntity.getShoolId());<br>Aggregation agg = Aggregation.newAggregation(
                    Aggregation.match(cri),
                    Aggregation.project("memberId","attendenceTime","address"),
                    Aggregation.group("memberId").max("attendenceTime").as("attendenceTime")
            );
 
 
            List<MongoMoguAttendenceDto> result =template.aggregate(agg,"mogu_attendance",MongoMoguAttendenceDto.class).getMappedResults();

  mongdb 查询: 

db.mogu_attendance.aggregate([
{"$match":{ "schoolId" : "f11c8ea12f457dbc19c768a8bb6357f8"}} ,
{"$project":{address:1,memberId:1,attendenceTime:1, schoolId:1,userId:1}},
{"$group" : { "_id" : "$memberId" ,"attendenceTime" : { "$max" : "$attendenceTime"}}}])

类似于: select memberId as _id , max(attendenceTime) as attendenceTime from mogu_attendance group by memberId where schoolId='f11c8ea12f457dbc19c768a8bb6357f8';

 

查询某个学校 每个学生(memberId 是学生 id) 最后一次考勤的时间。

输出:

1
2
3
4
5
6
7
8
9
10
11
/* 1 */
{
    "_id" : "ffd56c4f63f20adbbc7c88fe6dc26353",
    "attendenceTime" : ISODate("2019-08-31T10:00:00.000Z")
}
 
/* 2 */
{
    "_id" : "11c21ada808fb8a9bcb32aade1a5b61e",
    "attendenceTime" : ISODate("2019-08-22T05:59:28.646Z")
}

  在实体类 

MongoMoguAttendenceDto
总包括两个字段:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class MongoMoguAttendenceDto implements Serializable {
    private static final long serialVersionUID = 1L;
 
    /**
     * 唯一主键
     */
    @Id
    private String attendanceId;
    /**
     * 用户id
     */
    private String userId;
    ……
    /**
     * 考勤时间
     */
    private Date attendenceTime;
 
    private String backup;

  则把 查询结果的 _id 取值 memberId , 作为主键,并且 映射给 MongoMoguAttendenceDto 实体对象的 attendanceId , 

1
max("attendenceTime").as("attendenceTime")  把 attendenceTime字段 映射给  MongoMoguAttendenceDto 实体 的attendenceTime字段<br><br><br><br><br>select * from  mogu_attendance where memberId='edcff6ee12daf586a27f7ad6cdb9814f'  order by  attendenceTime desc limit 1;<br>相当于:
1
db.getCollection('mogu_attendance').find({ "memberId" : "edcff6ee12daf586a27f7ad6cdb9814f"}).sort({"attendenceTime":-1}).limit(1)<br>java语句:
1
2
3
4
5
6
Sort sort =null;
sort = new Sort(Sort.Direction.DESC,"attendenceTime");
Query query = new Query();
Criteria cri = Criteria.where("memberId").is(gxyJobEntity.getStudentId());
query.addCriteria(cri);
List<MongoMoguAttendenceDto> result =template.find(query.with(sort).limit(1),MongoMoguAttendenceDto.class);

  或者:MongoMoguAttendenceDto result =template.findOne(query.with(sort).limit(1),MongoMoguAttendenceDto.class);