我正在使用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。
答案 0 :(得分:0)
mapReduce
无法在Mongoose中以与在shell中相同的方式调用。
对于Mongoose,电话需要看起来像:
Testimonials.mapReduce({
map: mapTestimonial,
reduce: reduceF,
out : {reduce : "Talent_Testimonials"}
}, function (err, results) { ... });
请参阅文档here。