我的“样本”集合中有1亿条记录。我想要另一个包含所有不同用户名“user.screen_name”
的集合我的mongodb数据库“sample”集合中有以下结构:
{
"_id" : ObjectId("515af34297c2f607b822a54b"),
"text" : "random text goes here",
"user" :
{
"id" : 972863366,
"screen_name" : "xname",
"verified" : false,
"time_zone" : "Amsterdam",
}
}
当我尝试“distinct('user.id).length”之类的内容时,我收到以下错误:
"errmsg" : "exception: distinct too big, 16mb cap",
我需要一种高效方式,在我的“示例”集合中只有另一个只有{“user_name”:“name”}不同用户的集合。那么我可以查询这个新数据库的大小并获得不同用户的数量。 (以及将来的进一步分析)
答案 0 :(得分:0)
我尝试了我找到here的解决方案,它运行良好:) ..我将保留线程并添加我的代码以防有人需要它。
var SOURCE = db.sample;
var DEST = db.distinct;
DEST.drop();
map = function() {
emit( this.user.screen_name , {count: 1});
}
reduce = function(key, values) {
var count = 0;
values.forEach(function(v) {
count += v['count'];
});
return {count: count};
};
res = SOURCE.mapReduce( map, reduce,
{ out: 'distinct',
verbose: true
}
);
print( "distinct count= " + res.counts.output );
print( "distinct count=", DEST.count() );
此致