我有这样的"statistic"集合:
{ "_id" : ObjectId("4d2407265ff08824e3000001"), "request_uri" : {"netloc":"localhost/8080", "path":"vi/sitelicense"}, "api_key" : "apikey", "request_method" : "POST" }
{ "_id" : ObjectId("4d2551b4ae9fa739640df821"), "request_uri" : {"netloc":"localhost/8080", "path":"vi/sitelicense"}, "api_key" : "apikey", "request_method" : "GET" }
{ "_id" : ObjectId("4d255b115ff08821c2000001"), "request_uri" : {"netloc":"localhost/8080", "path":"vi/sitelicense"}, "api_key" : "apikey", "request_method" : "POST" }
{ "_id" : ObjectId("4d25e8d55ff08814f8000001"), "request_uri" : {"netloc":"localhost/8080", "path":"vi/sitelicense"}, "api_key" : "apikey", "request_method" : "PUT" }
{ "_id" : ObjectId("4d2407265ff08824e3700001"), "request_uri" : {"netloc":"localhost/8080", "path":"vi/sitelicense"}, "api_key" : "apikey", "request_method" : "POST" }
如何使用map reduce操作找到"statistics"集合中的文档总数?下面是我的map reduce操作:
map_number_api_calls = function() {
emit(this._id, 1);
}
reduce_number_api_call = function(k, v) {
var i, sum = 0;
for (i in v) {
sum += v[i];
}
return sum;
}
但是上面的map-reduce操作并没有返回文档的总数。我需要总共5份托收文件。例子吗?
你的map/reduce不能工作的原因是你从你的map发出的一对值必须包括两件事:
1. Key over which you want to aggregate values
2. Value
你的键应该是一个常量——也就是说,你想聚合整个集合,所以你需要让所有发出的值映射到同一个键。
将emit(this._id, 1)
替换为emit(null, 1)
,它将工作(它不一定是null
,它可以是1
或' "collection"字符串字面值或任何其他常量)。
除非你这样做是为了练习学习map/reduce,否则我建议使用db.collection.count()
来获取集合中项目的计数。