java – 如何使用mongodb和NumberLong计算平均值
发布时间:2020-05-24 10:22:53 所属栏目:Java 来源:互联网
导读:我试图使用 mongodb java驱动程序计算集合的平均值,如下所示: DBObject condition = new BasicDBObject(pluginIdentifier, plugin.getIdentifier());DBObject initial = new BasicDBObject();initial.put(count, 0);initial
|
我试图使用 mongodb java驱动程序计算集合的平均值,如下所示: DBObject condition =
new BasicDBObject("pluginIdentifier",plugin.getIdentifier());
DBObject initial = new BasicDBObject();
initial.put("count",0);
initial.put("totalDuration",0);
String reduce = "function(duration,out) { out.count++;
out.totalDuration+=duration.floatApprox; }";
String finalize = "function(out) { out.avg = out.totalDuration.floatApprox /
out.count; }";
DBObject avg = durationEntries.group(
new BasicDBObject("pluginIdentifier",true),condition,initial,reduce,finalize);
System.out.println(avg);
“duration”是NumberLong(在java中,它是一个Long,可能是java驱动程序转换它). > db.DurationEntries.findOne().duration.floatApprox 5 但是,运行上面的java代码不会计算平均值,而是返回它 [{"pluginIdentifier":"dummy","count":7.0,"totalDuration":NaN,"avg":NaN}]
我尝试了几种变体,有和没有.floatApprox,但直到现在才能获得一些奇怪的字符串连接. 我的问题是:我做错了什么/我应该如何计算一个NumberLong列的平均值? 解决方法如果你遇到map / reduce问题,你可能应该进入mongodb控制台,在那里进行操作,然后将其转换为你的驱动程序.举例来说,以下文件: db.tasks.find()
{ "_id" : ObjectId("4dd51c0a3f42cc01ab0e6506"),"duration" : 10,"name" : "StartProcess","date" : "20110501" }
{ "_id" : ObjectId("4dd51c0e3f42cc01ab0e6507"),"duration" : 11,"date" : "20110502" }
{ "_id" : ObjectId("4dd51c113f42cc01ab0e6508"),"duration" : 12,"date" : "20110503" }
您可以编写mapReduce来计算StartProcess的平均持续时间,如下所示: m = function (){
emit( this.name,{ totalDuration : this.duration,num : 1 } );
};
r = function (name,values){
var n = {totalDuration : 0,num : 0};
for ( var i=0; i<values.length; i++ ){
n.totalDuration += values[i].totalDuration;
n.num += values[i].num;
}
return n;
};
f = function(who,res){
res.avg = res.totalDuration / res.num;
return res;
};
然后,假设您使用的是MongoDB 1.7或更高版本: db.tasks.mapReduce( m,r,{ finalize : f,out : {inline : 1} });
会给你以下答案: "results" : [
{
"_id" : "StartProcess","value" : {
"totalDuration" : 33,"num" : 3,"avg" : 11
}
}
]
如果这没有帮助,您可以发布您的地图功能和文档结构. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
