$sample(集計)
定義
$sample
入力ドキュメントから指定された数のドキュメントをランダムに選択します。
$sample
ステージ構文:{ $sample: { size: <positive integer N> } } N
は、ランダムに選択するドキュメントの数です。N
を1
以上の整数に設定します。
動作
次の条件が すべて 当てはまる場合、 $sample
は疑似ランダム カーソルを使用してN
ドキュメントを選択します。
$sample
は、パイプラインの第一ステージです。N
は、コレクション内の全ドキュメントの 5% 未満です。このコレクションには 100 を超えるドキュメントが含まれています。
以前の条件のいずれかが false の場合、 $sample
は次のようになります。
先行する集計ステージまたはコレクション スキャンから出力されるすべてのドキュメントを読み取ります。
ランダムな並べ替えを実行して、
N
ドキュメントを選択します。 ランダムソートには、ソートメモリ制限 が適用されます。注意
ビューは、 集計パイプライン の結果です。 ビューで
$sample
を使用すると、MongoDB は ステージをビューの集計パイプライン構文の末尾に追加します。 したがって、ビューの$sample
ステージは最初のステージではなく、常にコレクションスキャンが行われます。
シャーディングされたクラスターで $sample
を使用すると、各シャードは個別にサンプル操作を実行します。mongos
は、各シャードのサンプル操作をマージした結果をサンプリングし、要求された数のドキュメントを返します。
例
このセクションでは、次のusers
コレクションを使用する集計パイプラインの例を示します。
db.users.insertMany( [ { _id : 1, name : "dave123", q1 : true, q2 : true }, { _id : 2, name : "dave2", q1 : false, q2 : false }, { _id : 3, name : "ahn", q1 : true, q2 : true }, { _id : 4, name : "li", q1 : true, q2 : false }, { _id : 5, name : "annT", q1 : false, q2 : true }, { _id : 6, name : "li", q1 : true, q2 : true }, { _id : 7, name : "ty", q1 : false, q2 : true } ] )
次の集計操作は、コレクションから 3
ドキュメントをランダムに選択します。
db.users.aggregate( [ { $sample: { size: 3 } } ] )
この操作は、3 つのランダムなドキュメントを返します。