0

如果我有一个字段extr_date,我想运行一个 MAP-REDUCE,我想使用extr_date大于任何特定日期的文档,

我有两个选择,

首先,我在结果语句中提供查询字段,如下所示

var res_acc = db.some_input_coll.mapReduce(map_func, red_func, {query : { extr_date : {$gte:any_given_date}},finalize : final, out :{ "merge" : "some_output_coll" }});

其次,我将 if 条件提供到 map 函数中,如下所示,

var map_func = function(){
if(this.extr_date > given_date)
{
    emit({...} , {...})
}

...所以推荐哪个?

带有结果语句的查询是否减少了要检查地图的文档数量?

如果是,那么我怎样才能找到检查的文件数量?

4

1 回答 1

0

假设您在“extr_date”上有一个索引,第一种方法可能会更快,因为它会减少提供给 map 的文档数量。

要弄清楚有多少文档被过滤掉,您可以尝试使用 .explain() 单独运行查询。像这样的东西:

db.some_input_coll.find({ extr_date : {$gte:any_given_date}}).explain()

希望这可以帮助。

于 2012-05-09T16:10:48.460 回答