三:根据条件进行筛选
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]中装的是澳大利亚第一个城市的数据。。。 |