使用map reduce计算集合中的文档总数



我有这样的"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()来获取集合中项目的计数。

最新更新