MongoDBでは、$sampleRate
集約パイプラインステージは、入力ドキュメントのランダムな選択と一致します。
選択されたドキュメントの数は、ドキュメントの総数のパーセンテージとして表されたサンプルレートに近似しています。
$sampleRate
演算子はMongoDB4.4.2で導入されました。
$sampleRate
を使用する場合 、0
間の浮動小数点数としてサンプルレートを指定します および1
。選択プロセスでは均一なランダム分布が使用され、提供するサンプルレートは、特定のドキュメントがパイプラインを通過するときに選択される確率を表します。
例
employees
というコレクションがあるとします。 次のドキュメントを使用:
{ "_id" : 1, "name" : "Bob", "salary" : 55000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 4, "name" : "Christopher", "salary" : 45000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 } { "_id" : 6, "name" : "Homer", "salary" : 1 } { "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 } { "_id" : 8, "name" : "Zoro", "salary" : 300000 } { "_id" : 9, "name" : "Xena", "salary" : 382000 }
$sample
を使用できます そのコレクションから指定された数のドキュメントをランダムに選択するステージ。
例:
db.employees.aggregate(
[
{
$match: { $sampleRate: 0.33 }
}
]
)
結果:
{ "_id" : 1, "name" : "Bob", "salary" : 55000 } { "_id" : 6, "name" : "Homer", "salary" : 1 } { "_id" : 8, "name" : "Zoro", "salary" : 300000 }
0.33
のサンプルレートを提供する 、ドキュメントの約3分の1を返却するように指定しました。
ただし、実際の結果は、コレクションに含まれるドキュメントの数に応じて大幅に異なる可能性があります。ドキュメントの数が少ないコレクションでは結果がかなり異なりますが、コレクションが多いほど、予想される均一なランダム分布に近くなるはずです。
これを実証するために、同じコードを再度実行したときに得られる結果セットを次に示します。
{ "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 4, "name" : "Christopher", "salary" : 45000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 } { "_id" : 6, "name" : "Homer", "salary" : 1 } { "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }
そして再び:
{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 } { "_id" : 8, "name" : "Zoro", "salary" : 300000 }
そしてもう一度:
{ "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 6, "name" : "Homer", "salary" : 1 } { "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }
これは小規模なコレクションであるため、結果はかなり異なります。
正確な数のドキュメントを返す必要がある場合は、$sample
を使用してください 代わりにステージ。