MongoTemplate操作mongodb

本文深入探讨MongoTemplate,它是Spring Data MongoDB中的核心组件,用于方便地操作MongoDB数据库。我们将详细讲解MongoTemplate的使用方法,包括CRUD操作、查询构建、聚合框架等,并通过实例展示其实战应用,帮助开发者更高效地集成和管理MongoDB。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class ExamLogDaoImpl implements ExamLogDao{
	
	@Autowired
	private MongoTemplate mongoTemplate;
	/**
	 * 进入考试
	 * return uuid
	 */
	@Override
	public String enterExamLog(Object[] args) {
		Date date=new Date();
		DateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String logUuid=RText.getUUID();//自动生成uuid
		String enterTime=format.format(date); //系统当前时间
		Log_Exam_Base examL=new Log_Exam_Base();
		examL.setLogUuid(logUuid);
		examL.setExamId(ObjectUtils.toString(args[0], ""));
		examL.setExamName(ObjectUtils.toString(args[1], ""));
		examL.setEgid(ObjectUtils.toString(args[2], ""));
		examL.setUserId(ObjectUtils.toString(args[3], ""));
		examL.setUserName(ObjectUtils.toString(args[4], ""));
		examL.setAccount(ObjectUtils.toString(args[5], ""));
		examL.setClientIp(ServletActionContext.getRequest().getRemoteAddr());
		examL.setEnterTime(enterTime);
		mongoTemplate.insert(examL, "ExamLog");//自定义集合名插入文档
		return logUuid;
	}
	
	/**
	 * 退出考试
	 */
	@Override
	public void exitExamLog(Object[] args) {
		Date date=new Date();
		DateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String exitTime=format.format(date); //系统当前时间
		Query query = new Query(Criteria.where("logUuid").is(ObjectUtils.toString(args[0], "")));
		Update update = new Update().set("exitTime", exitTime);
		WriteResult r=mongoTemplate.upsert(query, update, "ExamLog");//根据字段修改文档
		
	}
	/**
	 * 答题操作
	 */

	@Override
	public void answerTopicLog(Object[] args) {
		Date date=new Date();
		DateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String exitTime=format.format(date); //系统当前时间
		Log_Exam_Operation eolM=new Log_Exam_Operation();
		eolM.setOperationTime(exitTime);
		eolM.setTopicId(ObjectUtils.toString(args[1], ""));
		eolM.setTopic(ObjectUtils.toString(args[2], ""));
		eolM.setAnswer(ObjectUtils.toString(args[3], ""));
		eolM.setAnswerContent(ObjectUtils.toString(args[4], ""));
		Query query = Query.query(Criteria.where("logUuid").is(ObjectUtils.toString(args[0], "")));
        Update update = new Update().addToSet("operation", eolM);
        WriteResult r=mongoTemplate.upsert(query, update, "ExamLog");//根据某一字段往内嵌文档增加一条数据
	}
	/**
	 * 日志列表
	 */
	@Override
	public PageObject getExamLogPageObject(Object[] args,Map req) {
		int totalCount = 1;
		int start = NumberUtils.toInt(ObjectUtils.toString(req.get("start"),"0"));
		int limit = NumberUtils.toInt(ObjectUtils.toString(req.get("limit"),"25"));
		List returnValue = null;
		try {
			Query query = new Query().limit(limit);//分页条数设置
			if(args.length>=3){//条件模糊查询
				if(args[0]!=null&&!"".equals(ObjectUtils.toString(args[0]))){
					query.addCriteria(new Criteria("account").regex(".*?" + ObjectUtils.toString(args[0]) + ".*"));
				}
				if(args[1]!=null&&!"".equals(ObjectUtils.toString(args[1]))){
					query.addCriteria(new Criteria("userName").regex(".*?" + ObjectUtils.toString(args[1]) + ".*"));
				}
				if(args[2]!=null&&!"".equals(ObjectUtils.toString(args[2]))){
					query.addCriteria(new Criteria("examName").regex(".*?" + ObjectUtils.toString(args[2]) + ".*"));
				}
			}
			query.skip(start);//跳过前start条数据
			
			query.sort().on("enterTime", Order.DESCENDING);//按进入时间倒序排序
			returnValue = mongoTemplate.find(query, Log_Exam_Base.class, "ExamLog");
			totalCount = (int) mongoTemplate.count(query, "ExamLog");
		} catch (Exception e) {
			e.printStackTrace();
		}
		PageObject page = new PageObject();
		page.setDatasource(returnValue);
		page.setTotalCount(totalCount);
		
		int _absolutePage = (int)Math.ceil(totalCount * 1.0/limit);
		page.setAbsolutePage(_absolutePage);
		
		int _currentPage = start/limit + 1;
		page.setCurrentPage(_currentPage);
		
		return page;
	}
	@Override
	public List getExamLogList(Object[] args) {
		List returnValue = null;
		try {
			Query query = new Query().limit(60000);
			if(args.length>=3){
				if(args[0]!=null&&!"".equals(ObjectUtils.toString(args[0]))){
					query.addCriteria(new Criteria("account").regex(".*?" + ObjectUtils.toString(args[0]) + ".*"));
				}
				if(args[1]!=null&&!"".equals(ObjectUtils.toString(args[1]))){
					query.addCriteria(new Criteria("userName").regex(".*?" + ObjectUtils.toString(args[1]) + ".*"));
				}
				if(args[2]!=null&&!"".equals(ObjectUtils.toString(args[2]))){
					query.addCriteria(new Criteria("examName").regex(".*?" + ObjectUtils.toString(args[2]) + ".*"));
				}
			}
			query.sort().on("enterTime", Order.DESCENDING);//按进入时间倒序排序
			returnValue = mongoTemplate.find(query, Log_Exam_Base.class, "ExamLog");
		} catch (Exception e) {
			e.printStackTrace();
		}
		return returnValue;
	}
	/**
	 * 获取内嵌子文档列表数据
	 */
	@Override
	public PageObject getExamOperation(Object[] args, Map req) {
		int totalCount = 1;
		int start = NumberUtils.toInt(ObjectUtils.toString(req.get("start"),"0"));
		int limit = NumberUtils.toInt(ObjectUtils.toString(req.get("limit"),"25"));
		
		List returnValue = null;
		try {
			Query query = new Query().limit(limit);
			query.addCriteria(Criteria.where("logUuid").is(ObjectUtils.toString(args[0], "")));
			query.skip(start);
			query.sort().on("operationTime", Order.DESCENDING);//按操作时间倒序排序
			List exmL = mongoTemplate.find(query, Log_Exam_Base.class, "ExamLog");
			if(exmL.size()>0){
				Log_Exam_Base em=(Log_Exam_Base) exmL.get(0);
				returnValue=em.getOperation();
			}
			if(returnValue!=null){
				totalCount = returnValue.size();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		PageObject page = new PageObject();
		page.setDatasource(returnValue);
		page.setTotalCount(totalCount);
		
		int _absolutePage = (int)Math.ceil(totalCount * 1.0/limit);
		page.setAbsolutePage(_absolutePage);
		
		int _currentPage = start/limit + 1;
		page.setCurrentPage(_currentPage);
		
		return page;
	}
}
用到的实体类
public class Log_Exam_Base extends BaseLog{
	private String examId;//考试id
	private String examName;//考试名称
	private String enterTime;//进入时间
	private String exitTime;//退出时间
	private String egid;//成绩id
	private List<Log_Exam_Operation> operation;//答题操作集合
	
	
	public String getExamId() {
		return examId;
	}
	public void setExamId(String examId) {
		this.examId = examId;
	}
	public String getEnterTime() {
		return enterTime;
	}
	public void setEnterTime(String enterTime) {
		this.enterTime = enterTime;
	}
	public String getExitTime() {
		return exitTime;
	}
	public void setExitTime(String exitTime) {
		this.exitTime = exitTime;
	}
	public List<Log_Exam_Operation> getOperation() {
		return operation;
	}
	public void setOperation(List<Log_Exam_Operation> operation) {
		this.operation = operation;
	}
	public String getEgid() {
		return egid;
	}
	public void setEgid(String egid) {
		this.egid = egid;
	}
	public String getExamName() {
		return examName;
	}
	public void setExamName(String examName) {
		this.examName = examName;
	}
	
	
}


评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值