Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

$sample(集計)

項目一覧

  • 定義
  • 動作
$sample

入力ドキュメントから指定された数のドキュメントをランダムに選択します。

$sample ステージの構文は次のとおりです。

{ $sample: { size: <positive integer N> } }

N は、ランダムに選択するドキュメントの数です。

次の条件が すべて 当てはまる場合、 $sampleは疑似ランダム カーソルを使用してNドキュメントを選択します。

  • $sample は、パイプラインの第一ステージです。

  • N は、コレクション内の全ドキュメントの 5% 未満です。

    注意

    $sampleがコレクション全体をスキャンするタイミングを決定するために使用するしきい値を構成することはできません。 しきい値は5 % です。 サイズがコレクション内のドキュメントの合計数の5 % を超える場合、 $sampleは生成されたランダム値でソートを実行します。 サンプル ドキュメントが100 MB を超えると、Top-k ソートがディスクにスピルする可能性があります。

  • このコレクションには 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 つのランダムなドキュメントを返します。

Tip

以下も参照してください。

戻る

$replaceWith

項目一覧