2012-02-08 3 views

답변

3

ORDER BY RAND()과 유사한 기술은 없습니다. 그리고 심지어 MySQL에서는 큰 테이블에서이를 피하는 것이 좋습니다.

그러나 몇 가지 일반적인 트릭을 적용 할 수 있습니다.

예를 들어 ID의 최소값과 최대 값을 알고 있으면 범위 내에서 임의의 값을 선택하고 다음 개체를 가져옵니다.

db.collection.find({_id: {$gte: random_id}}).limit(1); 

20 회 반복한다.

또는 각 문서에 "임의"필드를 추가 할 수 있습니다 (그리고 매번 한 번씩 다시 불러 오기). 이렇게하면 각 쿼리마다 무작위로 결과를 얻지는 않지만 값이 쌉니다.

db.collection.find().sort({pseudo_random_field: 1}).limit(20) 

// you can also skip some records here, but don't skip a lot. 
0

스킵과 랜덤 클래스를 사용하십시오.

class Book { 
    include MongoMapper::Document 

    key :title 
    key :author 
} 

rand = Random.rand(0..(Book.count-1)) 
Book.skip(rand).first 
관련 문제