Mongodb map减少了结果格式的变化

时间:2015-03-17 21:48:58

标签: mongodb mapreduce

我正在使用java api并调用以下map reduce命令:

MAP
function() { 
emit('nogroup',{endtime: this.endtime, _owner: this._owner}); 
}

REDUCE
function Reduce(key, values) { 
var res = 3426533531976; 
for ( var i=0; i<values.length; i++ ) {
if ( values[i].endtime < res && values[i]._owner == null  ) 
res = values[i].endtime; 
} 
return res;
}

使用此代码

String map = "function() { emit('nogroup',{endtime: this.endtime, _owner: this._owner}); }";
String reduce = "function Reduce(key, values) { var res = 9426533531976; for ( var i=0; i<values.length; i++ ) { if ( values[i].endtime < res && values[i]._owner == null  ) res = values[i].endtime; } return res;}";
MapReduceCommand cmd = new MapReduceCommand(userdataCollection, map, reduce, null, MapReduceCommand.OutputType.INLINE, null);
MapReduceOutput out = userdataCollection.mapReduce(cmd);

有时结果看起来不喜欢这个

{ "_id" : "nogroup" , "value" : { "floatApprox" : 1.426628475177E12}}

有时喜欢这个

{ "_id" : "nogroup" , "value" : 9.426533531976E12}

如何使用相同的代码提取我的长结果?

此刻我

for (DBObject a : out.results()) {
    return ((BasicDBObject) a.get("value")).getLong("floatApprox");
}

但这仅适用于floatApprox变体

1 个答案:

答案 0 :(得分:0)

只需在以下后面添加支票:

res = values[i].endtime; 

例如

res = values[i].endtime;
if ( typeof res == "object"){
  res = res.floatApprox;
}