使用mongoTemplate的MapReduce分组报错

功能是将昨天的数据 用spCode和deviceCode分组统计,

统计的时候报错No converter found capable of converting from type [org.bson.BsonUndefined] to type [java.lang.String]

java代码

/**
	 * 获取昨天分组统计后的数据
	 */
	@Override
	public Iterator<AlarmStatis> getPerData(Date beginDate, Date endDate) {
		Criteria criteria = Criteria.where("createDate").gte(beginDate).lte(endDate);
		//Criteria criteria = new Criteria();
		/*
		 * Aggregation aggregation1 =
		 * Aggregation.newAggregation(Aggregation.match(criteria),
		 * Aggregation.group("spCode","deviceCode") .first("spCode").as("spCode")
		 * .first("deviceCode").as("deviceCode") .count().as("total"));
		 */
		
		
		  GroupBy groupBy = new GroupBy("spCode", "deviceCode").
	                initialDocument("{spCode : '', productCode : '', deviceType : '', deviceCode : '',  total : 0}").
	                reduceFunction("function(doc, prev){"
	                        + "prev.spCode = doc.spCode;"
	                        + "prev.productCode = doc.productCode;"
	                        + "prev.deviceType = doc.deviceType;"
	                        + "prev.deviceCode = doc.deviceCode;"
	                        + "prev.deviceGroupCodes = doc.deviceGroupCodes;"
	                        + "prev.total += 1 ;"
	                        + "}");
		 

		GroupByResults<AlarmStatis> statisResults = mongoTemplate.group(criteria, "alarm_info", groupBy,
				AlarmStatis.class);
		return statisResults.iterator();
	}

 异常详情:

[ERROR][2019-08-01 00:17:00,045][pool-11-thread-1][com.star.ac.task.AlarmDataStatisTaskPerDay][AlarmDataStatisTaskPerDay error]
org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [org.bson.BsonUndefined] to type [java.lang.String]
	at org.springframework.core.convert.support.GenericConversionService.handleConverterNotFound(GenericConversionService.java:321)
	at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:194)
	at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:174)
	at org.springframework.data.mongodb.core.convert.MappingMongoConverter.getPotentiallyConvertedSimpleRead(MappingMongoConverter.java:887)
	at org.springframework.data.mongodb.core.convert.MappingMongoConverter.readValue(MappingMongoConverter.java:1392)
	at org.springframework.data.mongodb.core.convert.MappingMongoConverter$MongoDbPropertyValueProvider.getPropertyValue(MappingMongoConverter.java:1335)
	at org.springframework.data.mongodb.core.convert.MappingMongoConverter.readProperties(MappingMongoConverter.java:335)
	at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:297)
	at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:253)
	at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:202)
	at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:198)
	at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:86)
	at org.springframework.data.mongodb.core.MongoTemplate$ReadDocumentCallback.doWith(MongoTemplate.java:2785)
	at org.springframework.data.mongodb.core.MongoTemplate.group(MongoTemplate.java:1798)
	at com.star.ac.dao.impl.AlarmMongoDataDaoImpl.getPerData(AlarmMongoDataDaoImpl.java:61)
	at com.star.ac.dao.impl.AlarmMongoDataDaoImpl$$FastClassBySpringCGLIB$$2dc19c66.invoke(<generated>)
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:746)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
	at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)

上述代码对应的mongoDB语句

db.alarm_info.group({

key:{"spCode":1,"deviceCode":1},
find:{"deviceCode":{$type:"undefined"}},
initial:{"spCode" : "", "productCode" : "", "deviceType" : "", "deviceCode" :"",  total : 0},

"$reduce" :function(doc, prev){
                      prev.spCode = doc.spCode;
                         prev.productCode = doc.productCode
                        prev.deviceType = doc.deviceType;
                    prev.deviceCode = doc.deviceCode;
            prev.deviceGroupCodes = doc.deviceGroupCodes;  
                        prev.total += 1;
                        }
}

)

因为是文档型数据库, 统计的数据里面有的没有deviceCode productCode这几个字段, 因此统计结果会显示undefined

上面代码里定义的结果接收类 AlarmStatis  中的字段都定义为String,所以会出现[org.bson.BsonUndefined] to type [java.lang.String]转化失败

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值