首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

mongodb mapreduce分析(11)

mongodb mapreduce分析(11)

三:根据条件进行筛选

db.runCommand({ mapreduce: "data",
map : function Map() {


   
    if(this.location=="青岛")
    {
   
    emit(
        "result",                    // how to group
        this    // associated data point (document)
    );
    }

},
reduce : function Reduce(key, values) {


    var reduced = {city:[]}; // initialize a doc (same format as emitted value)

    values.forEach(function(val) {
   
        reduced.city.push(val);
    });

    return reduced;   
   
   
   

},
finalize : function Finalize(key, reduced) {
    /*  
   
    // Make final updates or calculations
    reduced.avgAge = reduced.age / reduced.count;
   
    */

    return reduced;
},
out : { inline : 1 }
});




疑问:



1.对一个集合做mapreduce时 能引用到另一个集合的数据么? 用DBf能不能做到?





2.分组后还能更改_id么 拼接分组后 想改成标准_Id(可在emit时用new ObjectId()创建新_id,但不再具有分组功能)

例如:


用省份作为key分组后,_id就是显示的省份,能不能让它变成一个正常的id如下格式的id





3.提取的数据能声明成为全局变量么? 即在map时只对第一条文档,提出数据,然后在第二条文档时能使用第一条的数据。类似于在scope里声明[now_date:new data();],now_date就能在全局使用,可以对map,reduce,finalize函数 以及对每一条文档处理时都能使用。但这个变量我需要从数据中提取。





4.第一组文档要与第二组文档的数据进行比较,怎么实现(感觉mapreduce处理的流程是处理完一条文档后开始第二条文档)

我们知道比如用国家分组。 reduce : function Reduce(key, values)中values数组中第一次只包含了中国的数据,values[0]里装的是中国的第一个城市数据,values[1]装的是中国的第二个城市数据,。。。处理完中国的数据后,才进行第二次reduce : function Reduce(key, values) values里包含了澳大利亚的数据,values[0]中装的是澳大利亚第一个城市的数据。。。
返回列表