$sampleRate(集計)
定義
$sampleRate
ランダムに選択された入力ドキュメントと一致します。 選択されるドキュメント数は、ドキュメントの総数に対するパーセンテージで表されるサンプルレートに近似します。
$sampleRate
演算子の構文は次のとおりです。{ $sampleRate: <non-negative float> }
動作
選択プロセスでは一意のランダム分散が使用されます。 サンプリング レートは、特定のドキュメントがパイプラインを通過するときに選択される確率を表す 0 から 1 までの浮動小数点数です。
たとえば、サンプル レートが0.33
の場合、3 件のドキュメントがほぼ 1 つ選択されます。
この式:
{ $match: { $sampleRate: 0.33 } }
は、次のように $rand
演算子を使用することと同じです。
{ $match: { $expr: { $lt: [ { $rand: {} }, 0.33 ] } } }
選択プロセスは非決定的であるため、同じデータに対して繰り返し実行されると異なる結果が生じます。 一般に、データセットが小さいほど、実行ごとに選択されるドキュメント数の変動が大きくなります。 コレクション サイズが増加すると、選択されるドキュメントの数は一意のランダム分布の期待値に近づくようになります。
注意
実行ごとに正確な数のドキュメントが必要な場合は、 $sampleRate
の代わりに$sample
演算子を使用する必要があります。
例
このコードでは、100 個のドキュメントを含む小規模なコレクションが作成されます。
N = 100 bulk = db.collection.initializeUnorderedBulkOp() for ( i = 0; i < N; i++) { bulk.insert( {_id: i, r: 0} ) } bulk.execute()
$sampleRate
演算子をパイプラインで使用して、コレクションからランダムなドキュメントを選択できます。 この例では、 $sampleRate
を使用してドキュメントの約 3 分の 1 を選択しています。
db.collection.aggregate( [ { $match: { $sampleRate: 0.33 } }, { $count: "numMatches" } ] )
これは、サンプル コレクションで 5 回実行された場合の出力です。
{ "numMatches" : 38 } { "numMatches" : 36 } { "numMatches" : 29 } { "numMatches" : 29 } { "numMatches" : 28 }