【发布时间】:2011-12-14 00:57:56
【问题描述】:
我对map/reduce的理解似乎不够。我想知道我是否可以从集合中选择一个文档子集并仅在该子集上运行我的 map 和 reduce 函数。
一般来说可以吗?
如果不是,这意味着所有过滤都必须在发射之前在 map 函数中完成。我已经为我的用例写了一张这样的地图:
map = <<-EOF
function(){
Array.prototype.contains = function(obj) {
var i = this.length;
while (i--) {
if (this[i] === obj) {
return true;
}
}
return false;
};
project_ids = ['#{@project_ids.map{|pid| pid.to_s}.join('\',\'')}'];
if(project_ids.contains(this.project_id.toString())) {
if(this.time.getFullYear() == '#{@year}' && this.time.getMonth() == '#{@month.to_i - 1}') {
emit(
this.time.getDate(),
{
foos: this.stats.foos
}
);
}
}
};
EOF
这是 Rails 项目的一部分,使用 map / reduce 实现的方法实际上比纯 ruby 方法慢 3 倍。
所以我想知道是否有可能首先应用一些条件过滤我的记录集,然后通过 map/reduce 运行记录子集以获取我的数据。
有人能告诉我吗? 提前谢谢 费利克斯
【问题讨论】:
标签: ruby-on-rails mongodb mapreduce