Mongoose mapReduce错误:必须定义OUT参数

时间:2014-09-19 15:24:50

标签: node.js mongodb mongoose

我正在使用mongoose框架与mongodb进行通信。现在我正处于使用mapReduce加入两个集合的情况。我已经按照这个tutoria“http://blog.knoldus.com/2014/03/12/easiest-way-to-implement-joins-in-mongodb-2-4/”来完成它。 我使用robomongo在mongoDB Shell中使用mapReduce成功完成了连接。 我正在尝试使用mongoose框架工作,但它给我的错误是Out参数必须被藐视。

代码示例我做了什么。

这是用户个人资料的收藏架构:

  var User = new mongoose.Schema({
       name : {
        first : {type : String},
        last : {type : String}
    },
    title : {type : String},
    userName : {type : String, unique : true},
    profileImgUrl : {type : String},
    mojo : Number
 });

这是推荐书的收集架构:

var Testimonials = new mongoose.Schema({
     from : String,
     to : String,
     text : String
  });

这是使用mongoose,nodejs的代码: -

var mapTalent = function () {
            var output= {userName : this.userName,firstname:this.name.first,                      lastname:this.name.last , profileImgUrl : this.profileImgUrl, mojo : this.mojo, text : null}
                emit(this.userName, output);
            };

var mapTestimonial = function () {
            var output = {fromTalentName : this.fromTalentName, firstname:null, lastname:null, profileImgUrl : null, mojo : null, text : this.text}
                emit(this.text, output);
            };

 var reduceF = function(key, values) {
        var outs = {firstname:null, lastname:null , profileImgUrl:null, text : null, mojo:null};

        values.forEach(function(v){

                       if(outs.firstname ==null){
                            outs.firstname = v.firstname
                        }
                        if(outs.lastname ==null){
                            outs.lastname = v.lastname
                        }
                        if(outs.profileImgUrl ==null){
                            outs.profileImgUrl = v.profileImgUrl
                        }
                        if(outs.mojo ==null){
                            outs.mojo = v.mojo
                        }
                        if(outs.text == null){
                            outs.text = v.text
                        }
         });
        return outs;
    };

  result = Testimonials.mapReduce(mapTestimonial, reduceF, {out : {reduce : "Talent_Testimonials"}});

   result = Talent.mapReduce(mapTalent, reduceF, {out : {reduce : "Talent_Testimonials"}});

此处引发错误为“必须定义out选项参数”。

我在这里做错了我没有得到。这同样适用于mongoDB shell。

1 个答案:

答案 0 :(得分:0)

mapReduce无法在Mongoose中以与在shell中相同的方式调用。

对于Mongoose,电话需要看起来像:

Testimonials.mapReduce({
    map: mapTestimonial,
    reduce: reduceF, 
    out : {reduce : "Talent_Testimonials"}
}, function (err, results) { ... });

请参阅文档here