mongoTemplate查询数据方式

方式一:

Query query = new Query();
// 时间区间
if (StrUtil.isNotEmpty(param.getExpenseTimeBegin()) && StrUtil.isNotEmpty(param.getExpenseTimeEnd())) {
	query.addCriteria(Criteria.where("statisticsDatetime").gte(param.getExpenseTimeBegin()).lte(param.getExpenseTimeEnd()));
}
// 门店
if (param.getStoreId() != null) {
	query.addCriteria(Criteria.where("storeId").is(param.getStoreId()));
}
// 父门店
if (param.getParentStoreId() != null) {
	query.addCriteria(Criteria.where("parentStoreId").is(param.getParentStoreId()));
}

List<ContractItemExpenseStatistics> statisticsList = mongoTemplate.find(query, ContractItemExpenseStatistics.class, MongodbTableEnum.expense_statistics.getValue());

此方式在数据量较大的情况下速度会比较慢,需要将数据全部取出来,然后再映射成实体类,在数据量比较大的话不推荐这种方式

方式二:

DBObject  query = new BasicDBObject(); //setup the query criteria 设置查询条件
// 时间区间
if (StrUtil.isNotEmpty(param.getExpenseTimeBegin()) && StrUtil.isNotEmpty(param.getExpenseTimeEnd())) {
	query.put("statisticsDatetime", new BasicDBObject("$gte", param.getExpenseTimeBegin()).append("$lte", param.getExpenseTimeEnd()));
}
// 门店
if (param.getStoreId() != null) {
	query.put("storeId", param.getStoreId());
}
// 父门店
if (param.getParentStoreId() != null) {
	query.put("parentStoreId", param.getParentStoreId());
}

DBObject fields = new BasicDBObject(); //only get the needed fields. 设置需要获取哪些域
fields.put("statisticsDatetime", 1);
fields.put("storeId", 1);
fields.put("parentStoreId", 1);
fields.put("expenseStatisticsList", 1);

DBCursor dbObjects = mongoTemplate.getCollection(MongodbTableEnum.expense_statistics.getValue()).find(query, fields);

log.debug("开始时间:" + DateUtil.formatDateTime(new Date()));
int j = 0;

List<ContractItemExpenseStatistics> statisticsList = new ArrayList<>();
while (dbObjects.hasNext()) {
	DBObject next = dbObjects.next();
	j = j + 1;
	ContractItemExpenseStatistics statistics = new ContractItemExpenseStatistics();

	// 各个项目统计数据
	try {
		JSONArray jsonArray = JSONUtil.parseArray(next.get("expenseStatisticsList"));
		List<ExpenseStatisticsJsonVo> expenseStatisticsList = new ArrayList<>();
		for (int i = 0; i < jsonArray.size(); i++) {
			ExpenseStatisticsJsonVo jsonVo = JSONUtil.toBean(jsonArray.get(i).toString(), ExpenseStatisticsJsonVo.class);
			expenseStatisticsList.add(jsonVo);
		}
		statistics.setExpenseStatisticsList(expenseStatisticsList);
		statistics.setStatisticsDatetime(next.get("statisticsDatetime").toString());
		statistics.setStoreId(Integer.parseInt(next.get("storeId").toString()));
		statistics.setParentStoreId(Integer.parseInt(next.get("parentStoreId").toString()));
		statisticsList.add(statistics);
	}catch (Exception e){
		e.printStackTrace();
	}
}
log.debug("结束时间:" + DateUtil.formatDateTime(new Date()));
log.debug("j=" + j);

这种方法是使用的游标的方式,使用游标逐个获取数据,同时可以指定只获取哪些域,而不是全部获取回来,所以数据量比较大的时候还是使用游标的方式手动映射成实体类比较快!

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值