膨大なコレクション(1億件のレコード)からランダムなレコードを取得したいと考えています。
最も速くて効率的な方法は何ですか?
データはすでに存在しており、乱数を生成してランダムな行を取得できるフィールドはありません。
ベストアンサー1
MongoDBの3.2リリース以降では、コレクションからN個のランダムなドキュメントを取得するには、$sample
集計パイプライン演算子:
// Get one random document from the mycoll collection.
db.mycoll.aggregate([{ $sample: { size: 1 } }])
コレクションのフィルタリングされたサブセットからランダムなドキュメントを選択する場合は、$match
パイプラインの先頭にステージを追加します。
// Get one random document matching {a: 10} from the mycoll collection.
db.mycoll.aggregate([
{ $match: { a: 10 } },
{ $sample: { size: 1 } }
])
コメントに記載されているように、size
が 1 より大きい場合、返されるドキュメント サンプルに重複が含まれる可能性があります。