2016-07-06 6 views
0

マイNodeJSに機能をマップ減らすNodeJS MongoDBのネイティブドライバの結果を与えていないReduceが、このようなものです:地図は

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

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クエリはMongo Shellで正常に実行されますが、NodeJSから呼び出されたときには結果は得られません。空でもない。

地図を渡す際に何か間違っているのですか?機能を減らしますか?

答えて

0

あり、2つの問題だった: -

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