$sample(集計)
定義
$sample
入力ドキュメントから指定された数のドキュメントをランダムに選択します。
$sample
ステージの構文は次のとおりです。{ $sample: { size: <positive integer N> } } N
は、ランダムに選択するドキュメントの数です。
動作
次の条件が すべて 当てはまる場合、 $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 つのランダムなドキュメントを返します。