programing

몽구스에서 랜덤 레코드를 찾는 방법

javamemo 2023. 7. 14. 23:23
반응형

몽구스에서 랜덤 레코드를 찾는 방법

MongoDB에서 랜덤 레코드를 어떻게 찾을 수 있습니까?

StackOverflow에서 여러 개의 기사를 찾았지만 이해할 수 없었습니다.예를 들어 다음과 같습니다.

db.yourCollection.find().limit(-1).skip(yourRandomNumber).next()

코드로 어떻게 실행합니까?(수집은User)

User.findOne(RANDOM PLAYER).then(result) {
    console.log(result);
}

랜덤 레코드를 얻는 방법은 일치하는 모든 레코드를 쿼리하고 하나만 얻는 것입니다.이것이 무엇입니까?findOne()지정된 기준 없이 수행합니다.

그런 다음 가능한 모든 일치 항목을 임의로 선택합니다.이 작업은 다음을 통해 수행됩니다.

  1. 가능한 항목이 몇 개 있는지 확인합니다.count()이것을 위한 모금에.참고로, 댓글에 언급된 바와 같이,count버전 4에서는 더 이상 사용되지 않으며 대신 추정된 DocumentCount 또는 CountDocuments를 사용해야 합니다.다른 점은 무엇보다도 정밀도/메모리 사용에 있습니다.여기 그것에 대해 조금 논의하는 SO 포스트가 있습니다.

  2. 우리 숫자 안에 난수를 생각해 보세요.

  3. 사용하다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) 
    })
})

mongoose를 사용하여 mongodb에서 임의 문서를 가져옵니다.

    limitrecords=10;

    function getRandomArbitrary(min, max) {
      return Math.ceil(Math.random() * (max - min) + min);
    }

    var userschema = new Schema({
      name: String
    });

    User = mongoose.model('User', userschema);

    User.count({your_query},function(err,count){

       var skipRecords = getRandomArbitrary(1, count-limitrecords);

       query.skip(skipRecords); // Random Offset

       query.exec(function(err,result){
         console.log(result);  // 10 random users 
       });

    });

이것은 10개의 랜덤 레코드에 대한 예이며, 요구 사항에 따라 "제한 레코드"를 설정할 수 있습니다.

감사합니다!

언급URL : https://stackoverflow.com/questions/39277670/how-to-find-random-record-in-mongoose

반응형