1

ユーザースキーマからランダムなユーザーを返す以下のクエリがあります。

UserSchema.statics.random = function(id,callback) {
  this.count(function(err, count) {
    if (err) {
      return callback(err);
    }
    var rand = Math.floor(Math.random() * count);
    this.findOne()
    .where('_id').ne(id)
    .where('last_active').gte(new Date(new Date().setDate(new Date().getDate()-3)))
    .skip(rand)
    .exec(callback);
  }.bind(this));
};

ただし、時々返されます-これは、最初にドキュメントをカウントしてからフィルターを適用してドキュメントの数を減らすため、値が使用可能なドキュメントの数よりも大きくなる可能性があるNULLためだと思います。rand

これを行うためのより良い方法は何でしょうか?

上記のクエリを実行し、ドキュメントを数えてから、パラメーターを使用して別のクエリを実行し.skip()ますか?

4

1 に答える 1