下面的例子是在小数据下测试的,我尝试在单机的千万级别测试,等很久都没结果...
数据有表:crawler.videos,表结构是: _id, playUrl, siteId...
只有_id是有索引的,siteId不同的值分别代表不同的网站。值有:1,2,3三个值。
现在要统计数据库中每个网站的所含有的id数。就是相当于在mySql中select count(_id),siteId from videos group by siteId 的语句。
以siteId分组,统计各siteId所含有的id数。在mongo中,可以通过group函数来做,也可以通过mapReduce来做,现记录两种做法:
通过group()函数
语法:
db.coll.group(
{key: { fieldToGroup : true
},
cond: { condition_where },
reduce: function(obj , prev) { logical_sentenct; },
initial: { initial_values }
});
对于上述的需求,可以这样写:
use crawler;
db.videos.group(
{key:{siteId:true},
reduce:function(obj,prev){ prev.count++;},
ini