我正在使用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变体
答案 0 :(得分:0)
只需在以下后面添加支票:
res = values[i].endtime;
例如
res = values[i].endtime;
if ( typeof res == "object"){
res = res.floatApprox;
}