{
"_id" : ObjectId("5d4d74e1685764420c4f9337"),
"createTime" : ISODate("2019-08-09T13:25:33.851Z"),
"modifiedTime" : ISODate("2019-08-09T13:25:33.851Z"),
"isDeleted" : 0,
"dateYmd" : "2019-08-09",
"memberNumber" : "10025",
"username" : "小杨",
"attendenceTime" : ISODate("2019-08-09T13:25:33.851Z"),
"orgEntity" : {
"schoolId" : "f11c8ea12f457dbc19c768a8bb6357f8",
"schoolName" : "体验学院",
"depName" : "计算机学院",
"depId" : "5ca65e204a75670545bfe67418c1fd00",
"majorId" : "ca46da02e825dcf2ceb48a67e3a888db",
"classId" : "87108cd7b71775fdf45a220eb734b6be",
"majorField" : ".net开发",
"majorName" : "计算机应用技术",
"className" : "java一班"
"studentId" : "029f7fd62186bfd1e9b2047f76095361",
"userName" : "小杨",
"snowFlakeId" : NumberLong(120986237900296192),
"studentNumber" : "10025",
"grade" : "2018"
},
"teacherId" : "1fbb4bd971550b540e2fb58b3f1efe52"
}

mongodb 表 mogu_attendance 的集合如上:

按照  orgEntity 中的字段比如  schoolId 查询:

mongodb查询如下:

db.getCollection('mogu_attendance').find( { "orgEntity.schoolId" : "f11c8ea12f457dbc19c768a8bb6357f8",
"orgEntity.classId" : { "$in" : ["5a05540e9fd1ce8604015f3fa5067b63",
"61a582659385c9b91033bad877609758", "70ef8baad5d97ae7b77c6df3038b0d84",
"87108cd7b71775fdf45a220eb734b6be"] },
"$and" : [{ "attendenceTime" : { "$gte" : ISODate("2018-09-12T06:11:47.000Z") } },
{ "attendenceTime" : { "$lte" : ISODate("2029-09-22T06:11:47.000Z") } }] })

在java实体中,需要把 需要查询的字段如 schoolId 放到实体中:

@Data
public class MoguAttendenceEntity extends BaseEntity implements Serializable {
private static final long serialVersionUID = 1L; /**
* 唯一主键
*/ private String attendanceId; /**
* 学校ID
*/
private String schoolId; /**
* 是否补卡
*/
private Integer isReplace; private List<MongoGxyPracticeLogDto> logDtoList;
/**
* 入参
*/
private Date startTime;
private Date endTime;
private String comment;
private List<String> attendenceIds;
private Integer applyState;
private String teaId;
private Date dateTime; private String depId;
private String majorId;
private String classId;
private String userId;
private Long snowFlakeId;
/**
* 筛选天数条件(1 连续3天 2七天 3一个月)
*/
private Integer dayType;
/**
* 表名
*/
private String attendencdTabName;
private String stuTabName;
private String roleKey;
private List<String> depIds;
private List<String> classIds; /**
* 考勤时间
*/
private Date attendenceTime; private List<MoguAttendenceEntity> attendenceDtos; private String backup; private OrgEntity orgEntity; private String studentId; private String teacherId; private String grade;
  private List<String> classIds;
}

代码如下:

moguAttendenceEntity.setClassIds(getClassIds(request));
public List<MongoMoguAttendenceDto> listAttendance(MoguAttendenceEntity attendenceEntity){
Sort sort = new Sort(Sort.Direction.ASC,"attendenceTime");
Query query = new Query();
Criteria criteria = new Criteria();
if (attendenceEntity.getCurrPage() != 0 && attendenceEntity.getPageSize() != 0) {
query.skip((attendenceEntity.getCurrPage()-1)*attendenceEntity.getPageSize())
.limit(attendenceEntity.getPageSize());
}
if(StrUtil.isNotEmpty(attendenceEntity.getDepId())){
criteria.and("orgEntity.depId").is(attendenceEntity.getDepId());
}
if(StrUtil.isNotEmpty(attendenceEntity.getGrade())){
criteria.and("orgEntity.grade").is(attendenceEntity.getGrade());
}
if(StrUtil.isNotEmpty(attendenceEntity.getUsername())){
criteria.and("orgEntity.userName").is(attendenceEntity.getUsername());
}
if(StrUtil.isNotEmpty(attendenceEntity.getStudentNumber())){
criteria.and("orgEntity.studentNumber").is(attendenceEntity.getStudentNumber());
}
if(StrUtil.isNotEmpty(attendenceEntity.getSchoolId())){
criteria.and("orgEntity.schoolId").is(attendenceEntity.getSchoolId());
} if(StrUtil.isNotEmpty(attendenceEntity.getStuId())){
criteria.and("memberId").is(attendenceEntity.getStuId());
} if(attendenceEntity.getDepIds()!=null && attendenceEntity.getDepIds().size()>0 ){
criteria.and("orgEntity.depId").in(attendenceEntity.getDepIds());
} if(attendenceEntity.getClassIds()!=null && attendenceEntity.getClassIds().size()>0 ){
criteria.and("orgEntity.classId").in(attendenceEntity.getClassIds());
} if(attendenceEntity.getTeacherId()!=null ){
criteria.and("teacherId").is(attendenceEntity.getTeacherId());
} if(!StringUtils.isEmpty(attendenceEntity.getStartTime()) && !StringUtils.isEmpty(attendenceEntity.getEndTime())){
criteria.andOperator(
Criteria.where("attendenceTime").gte(attendenceEntity.getStartTime()),
Criteria.where("attendenceTime").lte(attendenceEntity.getEndTime())
);
} query.addCriteria(criteria);
query.with(sort);
List<MongoMoguAttendenceDto> data = mongoTemplate.find(query,MongoMoguAttendenceDto.class); return data;
} 聚合查询:
db.getCollection("mogu_attendance").aggregate(
[
{
"$match" : {
"attendanceType" : { $exists : false },
"state" : "NORMAL",
"$and" : [{ "attendenceTime" : { "$gte" : ISODate("2019-09-15T06:11:47.000Z") } },
{ "attendenceTime" : { "$lte" : ISODate("2019-09-16T06:11:47.000Z") } }]
}
},
{
"$group" : {
"_id" : {
"memberId" : "$memberId",
"planId" : "$planId",
"attendenceTime" : "$attendenceTime",
"attendanceType" : "$attendanceType",
"state" : "$state"
},
"COUNT_PID" : {
"$sum" : 1.0
}
}
}
]
)

mongoDB批量插入:

public int batchsave(List<NoticeSentRecordDto> objeceList){
template.insert(objeceList,NoticeSentRecordDto.class);
return 1;
} 二 mongodb 模糊查询:按照 orgEntity 下面的 userName 模糊查询, orgEntity.schoolId 精确查询:

db.getCollection('mogu_attendance').find({ "orgEntity.userName" : { "$regex" : "梦", "$options" : "" },
"orgEntity.schoolId" : "f11c8ea12f457dbc19c768a8bb6357f8" })

Sort sort = new Sort(Sort.Direction.DESC,"attendenceTime");
Query query = new Query();
Criteria criteria = new Criteria();
if (attendenceEntity.getCurrPage() != 0 && attendenceEntity.getPageSize() != 0) {
query.skip((attendenceEntity.getCurrPage()-1)*attendenceEntity.getPageSize())
.limit(attendenceEntity.getPageSize());
}
if(StrUtil.isNotEmpty(attendenceEntity.getUsername())){
criteria.and("orgEntity.userName").regex(attendenceEntity.getUsername());
}
if(StrUtil.isNotEmpty(attendenceEntity.getSchoolId())){
criteria.and("orgEntity.schoolId").is(attendenceEntity.getSchoolId());
}
query.addCriteria(criteria);
query.with(sort);
List<MongoMoguAttendenceDto> data = mongoTemplate.find(query,MongoMoguAttendenceDto.class);

mongodb分页 or 查询:

public List<GxyWarnEntity>  selectWarnPage(GxyWarnEntity  gxyWarnEntity){

        Criteria cri =Criteria.where("schoolId").is(gxyWarnEntity.getSchoolId());

        if(gxyWarnEntity.getBatchId()!=null) {
cri.and("batchId").is(gxyWarnEntity.getBatchId());
} if(gxyWarnEntity.getStudentName()!=null){
cri.orOperator(Criteria.where("studentName").regex(gxyWarnEntity.getStudentName()),
Criteria.where("teacherName").regex(gxyWarnEntity.getStudentName()) );
} Query query = new Query(cri);
if (gxyWarnEntity.getCurrPage() != null && gxyWarnEntity.getPageSize() != null) {
query.skip((gxyWarnEntity.getCurrPage()-1)*gxyWarnEntity.getPageSize())
.limit(gxyWarnEntity.getPageSize());
} return template.find(query, GxyWarnEntity.class);
}

删除集合:

template.dropCollection(View.class);

mongodb操作二的更多相关文章

  1. MongoDB(二)-- Java API 实现增删改查

    一.下载jar包 http://central.maven.org/maven2/org/mongodb/mongo-java-driver/ 二.代码实现 package com.xbq.mongo ...

  2. MongoDB Sharding(二) -- 搭建分片集群

    在上一篇文章中,我们基本了解了分片的概念,本文将着手实践,进行分片集群的搭建 首先我们再来了解一下分片集群的架构,分片集群由三部分构成: mongos:查询路由,在客户端程序和分片之间提供接口.本次实 ...

  3. 基础拾遗-----mongoDB操作

    基础拾遗 基础拾遗------特性详解 基础拾遗------webservice详解 基础拾遗------redis详解 基础拾遗------反射详解 基础拾遗------委托详解 基础拾遗----- ...

  4. {MySQL的库、表的详细操作}一 库操作 二 表操作 三 行操作

    MySQL的库.表的详细操作 MySQL数据库 本节目录 一 库操作 二 表操作 三 行操作 一 库操作 1.创建数据库 1.1 语法 CREATE DATABASE 数据库名 charset utf ...

  5. mongodb操作文件

    mongodb操作文件,主要是通过GridFS类.存储文件主要存放在fs中,其中的fs是数据库默认的.并且GridFS是直接与数据库打交道,与collection集合无关. ============= ...

  6. GIS基础软件及操作(二)

    原文 GIS基础软件及操作(二) 练习二.管理地理空间数据库 1.利用ArcCatalog 管理地理空间数据库 2.在ArcMap中编辑属性数据 第1步 启动 ArcCatalog 打开一个地理数据库 ...

  7. 百万年薪python之路 -- MySQL数据库之 MySQL行(记录)的操作(二) -- 多表查询

    MySQL行(记录)的操作(二) -- 多表查询 数据的准备 #建表 create table department( id int, name varchar(20) ); create table ...

  8. PHP操作 二维数组模拟mysql函数

    PHP操作 二维数组模拟mysql函数<pre>public function monimysqltest(){ $testarray=array( array('ss'=>'1', ...

  9. JNI操作二维数组

    之前的文章讲解了有关JNI使用方法,这篇文章进阶一点,介绍下JNI操作二维数组的方法.有了之前文章的操作JNI的方法,这里直接上代码了. Java代码部分 package com.testjni; p ...

随机推荐

  1. windows 8/10 彻底删除脱机文件

    先关闭脱机文件选项 控制面板 > 同步中心 > 管理脱机文件 > 查看脱机文件 > 点击 计算机 > ... > 脱机同步的文件夹右键,取消同步 可能需要重启 如果 ...

  2. Socket问题

    http://www.cnblogs.com/mareymarey111/archive/2011/12/08/2280253.html

  3. vector和list插入性能对比

    int main() { clock_t t1 =clock(); vector<string> vec_Str; ;i<;i++) { vec_Str.push_back(&quo ...

  4. windows下多个python版本共存 及安装Django

    了解python的人都知道python有2.x版本和3.x版本,而python3.x版本不向下兼容,但是根据具体的需要,有时候要2.x和3.x共存,python共存本身没有问题,只是需要设置一些环境变 ...

  5. initramfs机制

    1.什么是 Initramfs 在2.6版本的linux内核中,都包含一个压缩过的cpio格式的打包文件.当内核启动时,会从这个打包文件中导出文件到内核的rootfs文件系统,然后内核检查rootfs ...

  6. mysql你问我答

    1.尊敬的先生,请您谈谈mysql数据库的引擎 数据库中的表设定了什么存储引擎,那么该表在数据存储方式.数据更新方式.数据查询性能以及是否支持索引等方面就会有不同的“效果”. mysql引擎大致分两类 ...

  7. 牛客练习赛3 F - 监视任务——贪心&&树状数组

    题目 链接 $Reki$ 在课余会接受一些民间的鹰眼类委托,即远距离的狙击监视防卫..$Reki$ 一共接收到$m$份委托,这些委托与 $n$ 个直线排布的监视点相关.第 $i$ 份委托的内容为:对于 ...

  8. numba初体验

    numba初体验 今天在知乎上发现了一个很神奇的包numba,可以用jit的方式大幅提高计算型python代码的效率,一起来看一下 安装 numba的安装方式很简单,使用pip或者anacoda都可以 ...

  9. Oracle查看锁表和解锁

    --注意权限问题 1.查看是否有被锁的表: select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a ...

  10. find(expr|obj|ele)搜索所有与指定表达式匹配的元素。

    find(expr|obj|ele) 概述 搜索所有与指定表达式匹配的元素.这个函数是找出正在处理的元素的后代元素的好方法. 所有搜索都依靠jQuery表达式来完成.这个表达式可以使用CSS1-3的选 ...