子文档MongoDB(1亿条记录)中一个键的不同值



我的"sample" collection中有1亿条记录。我想要另一个集合,包含所有不同的用户名"user"。screen_name "

我有以下结构在我的mongodb数据库"样本"集合:

{
"_id" : ObjectId("515af34297c2f607b822a54b"),
"text" : "random text goes here",
"user" :
  {
    "id" : 972863366,
    "screen_name" : "xname",
    "verified" : false,
    "time_zone" : "Amsterdam",
   }
}

当我尝试像"distinct('user.id)。我得到以下错误:

    "errmsg" : "exception: distinct too big, 16mb cap",

我需要一个高效的方式来在我的"样本"集合中拥有另一个只有{"user_name": "name"}不同用户的集合。然后我可以查询这个新数据库的大小,得到不同用户的数量。(以及将来的进一步分析)

我尝试了我在这里找到的解决方案,它工作得很好:)..我将保留这个线程,并添加我的代码,以防有人需要它。

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() );

相关内容

  • 没有找到相关文章