sql >> データベース >  >> NoSQL >> MongoDB

MongoDB $ sampleRate

    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を使用してください 代わりにステージ。


    1. rakeタスク内でredisおよびresqueスケジューラーを開始しようとしています

    2. RobomongoをMongoDBに接続する方法

    3. RESTAPIの中間キャッシュとしてRedisを使用する

    4. Javaドライバーを使用してMongoDBに最後に挿入されたドキュメントIDを取得する