在 MongoDB 中,我正在尝试编写 Map-Reduce 函数,仅在满足某些条件时才保存数据。
我无法弄清楚如何不从我的减速器中发出()。它总是以一种或另一种方式保存数据。
这是一个通用示例。忽略数据的上下文——我创建这个数据和代码只是为了这个问题。
数据集:
{ "_id" : ObjectId("52583b3a58da9769dda48853"), "date" : "01-01-2013", "count" : 1 }
{ "_id" : ObjectId("52583b3d58da9769dda48854"), "date" : "01-01-2013", "count" : 1 }
{ "_id" : ObjectId("52583b4258da9769dda48855"), "date" : "01-02-2013", "count" : 1 }
{ "_id" : ObjectId("52583b4f58da9769dda48856"), "date" : "01-03-2013", "count" : 4 }
地图功能:
// Map all data by (date, count)
var map = function() {
var key = this.date;
var value = this.count;
emit(key, value);
}
简单地忽略不需要的数据的 Reducer。
// Only save dates which have count > 2
var reducer = function(date, counts) {
var sum = Array.sum(counts);
if (sum > 2) {
return sum;
}
}
结果(值 1 未被忽略):
{ "_id" : "01-01-2013", "value" : null }
{ "_id" : "01-02-2013", "value" : 1 }
{ "_id" : "01-03-2013", "value" : 4 }
我还添加了一个空的返回语句,但得到了相同的结果:
// Only save dates which have count > 2
var reducer = function(date, counts) {
var sum = Array.sum(counts);
if (sum > 2) {
return sum;
}
else return;
}
我希望发生的是在运行 Map-Reduce 后,我的输出集合中只存在以下数据。我怎样才能做到这一点?
{ "_id" : "01-03-2013", "value" : 4 }