2016-07-06 57 views
0

我的map-reduce中的NodeJS功能是這樣的:地圖減少不給於的NodeJS MongoDB的本地驅動程序結果

exports.getDistinctURLCount = function(params, callback){ 
    var mapFunction = function(){ 
     var bucket = 10; 
     emit(Math.floor(parseInt(this.xyz)/bucket), {count: 1}); 
    }; 

    var reduceFunction = function(key, values){ 
    var urlCount = 0; 
    if(values != undefined){ 
     values.forEach(function(value) { 
     urlCount += value.count ; 
     }); 
    } 
    return urlCount; 
    }; 

    var finalizeFunction = function (key, reducedVal) { 
     if(isNaN(reducedVal)){ 
     return reducedVal.count 
     }else{ 
     return reducedVal 
     } 
     }; 

    var output = { 
     out: {"inline":1}, 
     finalize: finalizeFunction 
     }; 

     return mongoMan.mapReduceFunction("clients", mapFunction, reduceFunction, output, function(err, result){ 
     if(err){ 
      callback(err, null); 
     }else{ 
      console.log(result); 
      callback(null, result); 
     } 
} 

MongoMan是不同的文件,接受的map-reduce功能:

exports.mapReduceFunction = function(collection, map, reduce, options, callback){ 
    _getModel(collection).mapReduce(map, reduce, options, function(err, docs){ 
    _prepResponse(err, docs, callback); 
    }); 
} 

map reduce查詢在Mongo Shell中成功運行,但通過NodeJS調用時,它不會產生任何結果。甚至沒有空白。

我是否在傳遞地圖時做了任何錯誤,減少函數?

回答

0

有兩個問題:

傳遞函數作爲參數傳遞給另一個函數 -

return mongoMan.mapReduceFunction("clients", mapFunction.toString(), reduceFunction.toString(), output, function(err, result){ 
    if(err){ 
     callback(err, null); 
    }else{ 
     console.log(result); 
     callback(null, result); 
    } 

的另一個問題是變量的範圍內 - 這裏指的How to use variables in MongoDB Map-reduce map function

另外,我使用的貓鼬。所以,這裏是mapReduce在Mongoose中的處理方式 - Mongoose API