定義
$sample入力ドキュメントから指定された数のドキュメントをランダムに選択します。
$sampleステージ構文:{ $sample: { size: <positive integer N> } }Nは、ランダムに選択するドキュメントの数です。Nを1以上の整数に設定します。
動作
次の条件が すべて 当てはまる場合、 $sampleは疑似ランダム カーソルを使用してNドキュメントを選択します。
$sampleは、パイプラインの第一ステージです。このコレクションには 100 を超えるドキュメントが含まれています。
以前の条件のいずれかが false の場合、 $sampleは次のようになります。
先行する集計ステージまたはコレクション スキャンから出力されるすべてのドキュメントを読み取ります。
ランダムな並べ替えを実行して、
Nドキュメントを選択します。 ランダムソートには、ソートメモリ制限 が適用されます。注意
ビューは、 集計パイプライン の結果です。 ビューで
$sampleを使用すると、MongoDB は ステージをビューの集計パイプライン構文の末尾に追加します。 したがって、ビューの$sampleステージは最初のステージではなく、常にコレクションスキャンが行われます。
シャーディングされたクラスターで $sample を使用すると、各シャードは個別にサンプル操作を実行します。mongos は、各シャードのサンプル操作をマージした結果をサンプリングし、要求された数のドキュメントを返します。
例
以下の例では、sample_mflix サンプル データセットの movies コレクションを使用します。このデータセットを配置にロードする方法について詳しくは、「サンプル データセットのロード」を参照してください。
次の集計操作は、movies コレクションから 3 ドキュメントをランダムに選択します。
db.movies.aggregate( [ { $sample: { size: 3 } }, { $project: { _id: 0, title: 1, year: 1, genres: 1 } } ])この操作は、3 つのランダムなドキュメントを返します。
MongoDB Node.jsドライバーを使用して $sample ステージを集計パイプラインに追加するには、パイプラインオブジェクトで $sample 演算子を使用します。
次の例では、入力コレクションから 5 つのランダムなドキュメントを返すパイプラインステージを作成します。次に、この例では集計パイプラインを実行します。
const pipeline = [{ $sample: { size: 5 } }];
const cursor = collection.aggregate(pipeline);return cursor;