1

「サンプル」コレクションには 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).length」などを試すと、次のエラーが発生します。

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

「サンプル」コレクション内の個別のユーザーの {"user_name": "name"} のみを含む別のコレクションを作成する効率的な方法が必要です。そのため、この新しいデータベースのサイズを照会して、個別のユーザー数を取得できます。(そして将来のさらなる分析のために)

4

1 に答える 1

0

ここで見つけた解決策を試してみましたが、うまくいきました:) ..スレッドを保持し、誰かが必要な場合に備えてコードを追加します。

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

よろしく

于 2013-04-08T18:29:21.160 に答える