Mongo で NumberLong 型の数百万件のレコードの平均を計算しようとしています。ただし、サイズが原因で、集計と $avg は機能しません。
それを解決するための良いアプローチはありますか?
Mongo で NumberLong 型の数百万件のレコードの平均を計算しようとしています。ただし、サイズが原因で、集計と $avg は機能しません。
それを解決するための良いアプローチはありますか?
これにはMapReduceを使用できます。
マップ関数は、各ドキュメントを取得し、2 つのフィールドを持つオブジェクトを出力します。1 つのフィールドvalue
は平均したい値を持ち、もう 1 つのフィールドcount
は の値を持ちます1
。
次に、reduce 関数は、フィールドとそれに渡されたすべてのオブジェクトcount
のフィールドの両方を合計し、要約されたドキュメントの数とそれらの合計を表す 1 つのオブジェクトを返します。value
ファイナライズ関数は、結果のオブジェクトの数で値を割り、この数値を返します。
公式ドキュメントの 2 番目の MapReduce の例は、ユースケースに非常に近いため、参考として使用できるはずです。唯一の違いは、コレクションのサブセットの個別の平均値ではなく、1 つの平均値のみが必要なためkey
、定数値に置き換えることです。