ランダムレコードを取得する背後にある考え方は、一致するすべてのレコードをクエリすることですが、1つだけを取得します。これがfindOne()
です 与えられた基準なしで行います。
次に、可能なすべての一致でランダムなエントリを選択する必要があります。これは次の方法で行われます:
-
可能なエントリの数を調べます-
count()
を使用します このためのコレクションに。コメントで述べたように、count
に注意してください バージョン4では廃止されており、代わりにestimatedDocumentCountまたはcountDocumentsを使用する必要があります。違いは、とりわけ精度/メモリ使用量にあります。これが少し議論しているSOの投稿です。 -
私たちのカウント内でランダムな数を考え出します。
-
skip()
を使用する 目的の一致に「スキップ」して、それを返します。
このSO回答から変更されたスニペットは次のとおりです:
// Get the count of all users
User.count().exec(function (err, count) {
// Get a random entry
var random = Math.floor(Math.random() * count)
// Again query all users but only fetch one offset by our random #
User.findOne().skip(random).exec(
function (err, result) {
// Tada! random user
console.log(result)
})
})