[解決済み] 複数のキーで "distinct "を効率的に実行するには?
質問
例えば、こんなコレクションがあります。
{market: 'SH', code: コード: '000001', 日付: '2012-01-01', 価格: 1000}.
{market: 'SZ', code: コード: '000001', 日付: '2012-01-01', 価格: 1000}.
{market: 'SH', code: コード: '000001', 日付: '2012-01-02', 価格: 1000}.
{market: 'SZ', code: コード: '000001', 日付: '2012-01-02', 価格: 1000}.
{market: 'SH', code: 000002'、日付:'2012-01-03'、価格:1000}。
...
このコレクションには数千万件の文書が含まれています。
2つのキーでdistinctを呼び出したい。
collection.distinct('market', 'code');
そして、結果を得る。
[マーケット:'SH', コード:'000001'}, {market: 'SZ', code:'000001'}, {マーケット:'SH', コード:'000002'}].
native distinctコマンドは1つのキーしか受け付けないため、map-reduceで実装しようとしました。しかし、map-reduceはnative distinctよりはるかに遅い。私の1キーdistinctのテストでは、map-reduceはnative distinctの約10倍の時間を費やした。
マルチキーの区別を効率的に実装する方法はありますか?
どのように解決するのですか?
MongoDB の次期 2.2 リリースを待ってもいいなら、aggregation フレームワークを使ってこのクエリを効率的に実行することができます。
collection = db.tb;
result = collection.aggregate(
[
{"$group": { "_id": { market: "$market", code: "$code" } } }
]
);
printjson(result);
テストマシンで100万レコードのコレクションを実行したところ、map/reduceバージョンでは1分以上かかったのに対し、4秒で実行できました。
関連
-
[解決済み] Mongodb find() クエリ : ユニークな値だけを返す (重複はしない) [duplicate].
-
[解決済み] MongoDB - シンプルなサブクエリの例
-
[解決済み] mongodの書き込みに関するデフォルトの懸念はどのバージョンにありますか?
-
[解決済み] mongod.serviceの再起動に失敗しました。ユニット mongod.service が見つかりませんでした
-
[解決済み] 複数のキーで "distinct "を効率的に実行するには?
-
[解決済み] MongoDBでフィールドが存在することを確認する
-
[解決済み] SocketException: アドレスはすでに使用中です MONGODB
-
[解決済み] MongoDBに "like "を使ってクエリを実行する方法
-
[解決済み] ユーザー名とパスワードでMongoDBを保護する方法
-
[解決済み] 日付に基づいたクエリを返す
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】MongoDbがコード100でシャットダウンする【終了しました
-
[解決済み] コマンド1つでmongo DBを停止する方法
-
[解決済み] MongoDB の個別集計
-
[解決済み] Mongodbでキーに基づいた重複を削除する方法は?
-
[解決済み] HomebrewでMongoDBをインストールする
-
undefinedエラー: getaddrinfo ENOTFOUND localhost または MongoDB connected disconnected
-
[解決済み] MongoDBの命名規則とは何ですか?
-
[解決済み] MongoDB のオブジェクトを部分的に更新して、新しいオブジェクトを既存のオブジェクトにオーバーレイ/マージするにはどうすればよいですか?
-
[解決済み】2つの異なるコレクションで重複したMongo ObjectIdが生成される可能性?
-
[解決済み】RedisはmongoDBよりどれくらい速いのか?