2012-08-15 17 views
26

例えば、このようなコレクションがある。
複数のキーで「個別」を効率的に実行するにはどうすればよいですか?

{市場: 'SH'、コード: '000001'、日: '2012年1月1日'、価格:1000}
{市場: 'SZ'、コード: '000001'、日付: '2012-01-01'、価格:1000}
{市場: 'SH'、コード: '000001'、日付: '2012-01-02'、価格:1000}
{市場:'SZ '、コード:' 000001 '、日付:' 2012-01-02 '、価格:1000}
{市場:' SH '、コード:' 000002 ' '2012-01-03'、価格:1000}
...

このコレクションには数千万のドキュメントが含まれています。

Iは、2つのキーで異なる呼び出したい:[

{市場: 'SH'、コード: '000001'}、 {市場:

collection.distinct('market', 'code'); 

及び結果を得ます'SZ'、コード: '000001'}、{ 市場: 'SH'、コード:ネイティブの異なるコマンドとして '000002'}]

のみつのキーを受け入れ、私が実装しようそれはmap-reduceを使用しています。しかし、map-reduceはネイティブではあまりにも遅すぎます。私のキーとは別のテストでは、map-reduceはネイティブのものより約10倍長い時間を費やします。
マルチキーを実装する効率的な方法はありますか?

答えて

53

あなたはMongoDBの次期2.2リリースを待つことを喜んでいる場合は、集約フレームワーク使用して効率的にこのクエリを実行することができます私のテストマシンで数百万のレコードコレクションに

collection = db.tb; 
result = collection.aggregate( 
      [ 
       {"$group": { "_id": { market: "$market", code: "$code" } } } 
      ] 
     ); 
printjson(result); 

を、これはで走りました4秒間、map/reduceバージョンは1分以上かかった。

関連する問題