Map Reduce未给出NodeJS MongoDB本机驱动程序的结果



我在 NodeJS 中的 map-reduce 函数是这样的:

 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 调用时,它不会产生任何结果。甚至不是空白。

我在传递地图、减少函数时做错了什么吗?

有两个问题:

将函数作为参数传递给另一个函数 -

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

另一个问题是变量的范围 - 参考这里 如何在MongoDB中使用变量 Map-reducemap函数

另外,我正在使用猫鼬。所以,这是mapReduce在猫鼬中的处理方式 - 猫鼬API

相关内容

  • 没有找到相关文章

最新更新